php serialize const - PullRequest
       7

php serialize const

1 голос
/ 26 февраля 2011

возможно ли сериализовать объект, подобный этому, со свойством const?

class A
{
   const XXX = 'aaa';
}

Я думаю, нет, но каково решение?

Ответы [ 3 ]

4 голосов
/ 26 февраля 2011

Конечно, можно сериализовать и экземпляр класса, который содержит свойство const.

Но это свойство const не будет присутствовать в сериализованной строке : в этом нет необходимости, так как она константа: когда строка будет не сериализована, она будет экземпляром вашего класса и, следовательно, будет иметь это свойство константы из определения класса.


Сериализация экземпляра вашего класса:

class A {
   const XXX = 'aaa';
   function test() {
       echo A::XXX;
   }
}

$a = new A();
$str = serialize($a);
var_dump($str);

Вы получите:

string 'O:1:"A":0:{}' (length=12)

Константа отсутствует в сериализованной строке.


Десериализация работает:

$b = unserialize($str);
var_dump($b);


И, если вы попытаетесь вызвать метод для этого $b объекта, получится при десериализации:

$b->test();

Константа действительно найдено , так как это в определении вашего класса, и вы получите:

aaa
4 голосов
/ 26 февраля 2011

A const не является свойством объекта, это константа класса. То есть он относится к вашему классу, а не к любому из его объектов. Именно поэтому вы ссылаетесь на константы класса, используя A::XXX вместо $this->XXX.

Следовательно, вы не можете сериализовать это const с вашими объектами, так же, как вы не можете сериализовать любые статические переменные.

Однако, когда вы десериализуете объект, вы получите его как экземпляр этого класса, так что вы можете просто обратиться к константе, используя имя класса:

$class = get_class(unserialize($A_obj));
echo $class::XXX;
0 голосов
/ 26 февраля 2011
<?php 
class A
{
   const XXX = 'aaa';

}
$a = new A();
$b=serialize($a);
$c=unserialize($b); // copy of the $a obj

, но вы можете получить к нему доступ таким образом A::XXX;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...