Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 после прочтения описания функций implode() и explode() вы обрадова- 
лись, насколько просто можно сохранить массив, например, в файле, а затем его 
оттуда 
считать и быстро восстановить. Если вас посетила такая мысль, то, скорее всего, 
вы уже 
успели в ней разочароваться: во-первых, таким образом можно сохранять только 
массивы- 
списки (потому что ключи в любом случае теряются), а во-вторых, ничего не 
выйдет с 
многомерными массивами. 
Давайте теперь предположим, что нам все-таки нужно сохранить какой-то массив 
(причем неизвестно заранее, сколько у него измерений) в файле, чтобы потом, при 

следующем запуске сценария, его аккуратно загрузить и продолжить работу. Можно, 

конечно, начинать писать универсальную рекурсивную функцию для упаковки масси- 
ва в строку (ведь в файлы можно писать только строки), и еще одну, которая 
будет 
эту строку разбирать и восстанавливать на ее основе массив в исходном виде. 
Рекомендую проделать это в качестве упражнения, заодно постарайтесь до- 
биться, чтобы упакованные данные занимали минимум объема. Это пригодит- 
ся вам в будущем, при работе с Cookies. 
Однако вскоре вы поймете, что все не так просто в PHP, в котором работа со 
ссылоч- 
ными переменными очень и очень ограничена. Особенно будет тяжело с функцией 
распаковки строки. 
И тут нам на помощь опять приходят разработчики PHP. Оказывается, обе функции 
давным-давно реализованы, причем весьма эффективно со стороны быстродействия 
(но, к сожалению, непроизводительно с точки зрения объема упакованных данных). 
Называются они, соответственно, Serialize() и Unserialize(). 

Часть III. Основы языка PHP 180 
Функция Serialize() возвращает строку, являющуюся упакованным эквивалентом 
некоего объекта $Obj, переданного во втором параметре. 
string Serialize(mixed $Obj) 
При этом совершенно не важно, что это за объект: массив, целое число…. Да что 
угодно. Например: 
$A=array("a"=>"aa", "b"=>"bb", "c"=>array("x"=>"xx")); 
$st=Serialize($A); 
echo $st; 
// выведется что-то типа нечто: 
// 
a:2:{s:1:"a";s:2:"aa";s:1:"b";s:2:"bb";s:1:"c";a:1:{s:1:"x";s:2:"xx";}} 
Вообще-то, я не уверен, что в будущих версиях PHP такой формат "упаковки" 
сохра- 
нится неизменным, хотя это очень и очень вероятно. 
Функция Unserialize(), наоборот, принимает в лице своего параметра $st строку, 
ранее созданную при помощи Serialize(), и возвращает целиком объект, который 
был упакован. 
mixed Unserialize(string $st) 
Например: 
$a=array(1,2,3); 
$s=Serialize($a); 
$a="bogus"; 
echo count($a); // выводит 1 
$a=Unserialize($s); 
echo count($a); // выводит 3 
Еще раз отмечу: сериализовать можно не только массивы, но и вообще что угодно. 
Однако в большинстве случаев все-таки используются массивы. Механизм сериали- 
зации часто применяется также и для того, чтобы сохранить какой-то объект в 
базе 
данных, и тогда без сериализации практически не обойтись. 

Глава 11 
Функции и области 
видимости 
По синтаксису описания функций PHP, на мой взгляд, довольно близок к идеальной 
концепции, которую многие программисты лелеют в своем воображении. Вот не- 
сколько основных достоинств этой концепции: 
r вы можете использовать параметры по умолчанию (а значит, функции с перемен- 
ным числом параметров); 
r области видимости переменных внутри функций представляются в древовидной 
форме, как и в других языках программирования; 
r существует удобная инструкция return, которой так не хватает в Паскале; 
r тип возвращаемого значения может быть любым; 
r как мы увидим дальше, функции можно использовать не только по их прямому 
назначению, но и для автоматизации создания "библиотекарей" и даже написания 
своего собственного интерфейса библиотечных файлов. 
К сожалению, разработчики PHP не предусмотрели возможность создания локальных 
функций (то есть одной внутри другой), как
 
<<-[Весь Текст]
Страница: из 287
 <<-