Я читал сериализованные / unserialize концепции PHP. Мне было интересно, как они хранятся в файловой системе / db? Я думаю, это в двоичном формате. Однако интересно, как хранится весь класс? Я понял, что данные в элементе данных могут быть сохранены, но как методы или сохранены?
Я имею в виду, как PHP знает, какой код написан внутри функции say, someFunc ()
$obj = new ClassName(); $obj->someFunc(); $serial = serialize($obj); $unserialobj = unserialize($serial); $unserialobj->someFunc();
PHP может знать, что делать в строке # 2, но как он знает, что делать в строке # 5, которая является неэриализованным объектом? он также сохраняет код?
PHP может знать, что делать в строке # 2, но как он знает, что делать в строке # 5, которая является неэриализованным объектом? он также сохраняет код?
Да, serialize()
сохранит информацию о классе, который этот объект является экземпляром, наряду с его состоянием, поэтому, когда вы несериализуете, вы получаете экземпляр этого класса, который в этом случае является ClassName
.
При сериализации объекта PHP сохраняет только текущее состояние объекта, то есть его значения свойств. Он не сериализует свои методы. Соответствующий класс должен быть загружен в память во время несериализации. PHP будет восстанавливать состояние объекта из сериализованной строки и передавать остальную часть информации (структуру и методы) из класса с тем же именем.
Это простой пример для понимания сериализации и нессериализации объекта в php. мы скрываем объект в строку с использованием сериализации и используем текущий статус текущего объекта (с заданными значениями) после несериализации на другой странице.
c.php
<?php class A { public $one ; public function A($val) { $this->one=$val; // echo $this->one; } function display(){ echo $this->one; } } ?>
c.php файл имеет класс с именем A.
a.php
<? require_once "c.php"; $ob= new A('by Pankaj Raghuwanshi : Object Searlization.'); $ob->display(); // Output is: by Pankaj Raghuwanshi : Object Searlization. $s = serialize($ob); // echo $s will show a string of an object ?> <br><A href='b.php?s=<?=$s;?>'>B-file</a>
Мы сериализуем преобразование этого объекта в строку и передаем эту строку на другую страницу методом get.
Примечание. Мы можем передать эту строку одной странице на другую страницу с помощью различных методов, таких как использование сеанса, мы можем сохранить в БД и извлечь другую страницу, сохранить в текстовый файл.
Мы будем исключать этот объект для другого имени файла b.php
b.php
<? require_once "c.php"; $ob = unserialize($_GET[s]); $ob->display(); // Output is: by Pankaj Raghuwanshi : Object Searlization. ?>
после unserialization, объект, показывающий такое же поведение, как файл a.php, и присваивание значения a.php все еще находится в памяти объекта. если мы будем отказывать этот объект после многих запросов HTTP. Объект будет сохранять все значения назначения в своей памяти.