преобразовать объект в строку php
Сериализация объектов в PHP.
Привет всем! Сегодня мы поговорим про такую тему, как сериализация объектов в PHP.
Зачем это нужно?
Если вы создаете клиент-серверное приложение, где захотите обмениваться информацией со скриптом, то здесь и пригодится сериализация. Нужна она для того, чтобы преобразовать обычный php объект в строку, которую сможет понять скрипт.
Пример использования
В качестве примера приведем класс User и создадим его объект.
Мы получим строку, хранящую наш объект. Теперь мы можем передать ее, к примеру, скрипту.
Теперь давайте преобразуем нашу строку обратно в наш объект.
Проверим, что наш объект работает
Если вы посмотрите на строку, которую сформировала функция serialize, то заметите, что там отсутствуют названия методов. Так что, чтобы все работало, следует подключать класс раньше, чем вызывается функция unserialize.
Магические методы __sleep и __wakeup
Если вы хотите, чтобы перед тем, как объект преобразуется в строку, или перед тем, как объект образуется из строки, что-то происходило, то используйте магические методы __sleep и __wakeup.
Заметьте, что в методе __sleep вы обязаны вернуть массив, содержащий названия полей, которые должны быть включены в строку. Таким образом, вы можете исключить поля, которые вам не нужны в результирующей строке.
Итак, на этом все. Спасибо за внимание и удачного кодинга!
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 4 ):
Здравствуйте. А можно, например сформировать строку. Сохранить её в переменную и вернуть её в магическом методе __toString
Здравствуйте. Если я Вас правильно понял, то Вы хотите, чтобы при попытке вывода объекта, как строку, выводился результат вызова функции serialize()? Если так, то вот решение: http://pastebin.com/bLfM1J6p
Спасибо за статью. А когда следующая статья про создание движка?
strval
(PHP 4, PHP 5, PHP 7, PHP 8)
strval — Возвращает строковое значение переменной
Описание
Возвращает строковое значение переменной. Смотрите документацию по типу string для более подробной информации о преобразовании в строку.
Список параметров
Переменная, которую необходимо преобразовать в строку.
value может быть любого скалярного типа или объектом, который реализует метод __toString(). strval() нельзя применить к массиву или объекту, которые не реализуют метод __toString().
Возвращаемые значения
Примеры
Пример #1 Пример использования strval() с магическим методом PHP __toString().
class StrValTest
<
public function __toString ()
<
return __CLASS__ ;
>
>
// Выводит ‘StrValTest’
echo strval (new StrValTest );
?>
Смотрите также
User Contributed Notes 8 notes
Some notes about how this function has changed over time, with regards the following statement:
> You cannot use strval() on arrays or on objects that
> do not implement the __toString() method.
In PHP 5.3 and below, strval(array(1, 2, 3)) would return the string «Array» without any sort of error occurring.
From 5.4 and above, the return value is unchanged but you will now get a notice-level error: «Array to string conversion».
For objects that do not implement __toString(), the behaviour has varied:
PHP 4: «Object»
PHP 5 = 5.2: Catchable fatal error: Object of class X could not be converted to string
Note on use of fmod()
I used the floating point fmod() in preference to the % operator, because % converts the operands to int, corrupting values outside of the range [-2147483648, 2147483647]
I haven’t bothered with «billion» because the word means 10e9 or 10e12 depending who you ask.
The function returns ‘#’ if the argument does not represent a whole number.
The only way to convert a large float to a string is to use printf(‘%0.0f’,$float); instead of strval($float); (php 5.1.4).
// strval() will lose digits around pow(2,45);
echo pow(2,50); // 1.1258999068426E+015
echo (string)pow(2,50); // 1.1258999068426E+015
echo strval(pow(2,50)); // 1.1258999068426E+015
// full conversion
printf(‘%0.0f’,pow(2,50)); // 112589906846624
echo sprintf(‘%0.0f’,pow(2,50)); // 112589906846624
I can’t help being surprised that
evaluates to true. It’s the same with strval and single quotes.
=== avoids it.
Why does it matter? One of my suppliers, unbelievably, uses 0 to mean standard discount and 0.00 to mean no discount in their stock files.
It seems that one is being treated as an unsigned large int (32 bit), and the other as a signed large int (which has rolled over/under).
As of PHP 5.1.4 (I have not tested it in later versions), the strval function does not attempt to invoke the __toString method when it encounters an object. This simple wrapper function will handle this circumstance for you:
__toString());
else
return strval($value);
>
In complement to Tom Nicholson’s contribution, here is the french version (actually it’s possible to change the language, but you should check the syntax 😉 )
PHP: Приведение типов
Приведение типа — это преобразование значения одного типа в значение другого типа.
Есть два вида приведения типов:
Неявное приведение типа выполняется интерпретатором автоматически, без непосредственного участия программиста. Например, значение будет автоматически преобразовано, если оператор ожидает, числовые операнды:
Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:
Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:
Приведение к целому числу
Строки преобразуются по следующим правилам:
Для других типов поведение преобразования в integer не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.
Приведение к числу с плавающей точкой
Строки преобразуются по следующим правилам:
Приведение к булеву типу
Следующие значения в результате преобразования дают значение FALSE :
Приведение к строке
Булево значение TRUE преобразуется в строку «1», а значение FALSE преобразуется в «» (пустую строку):
Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:
Массивы всегда преобразуются в строку «Array» :
NULL всегда преобразуется в пустую строку:
Для преобразования объекта в строку, объект должен иметь метод __toString() :
Приведение к NULL
Приведение к типу NULL не удаляет переменную и её значение, а лишь возвращает значение типа NULL :