Files
php-doc-ru/reference/var/functions/var-export.xml
2023-01-17 23:14:19 +03:00

297 lines
8.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0f27fadf81b66268edf545f13891401b4d53cc38 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.var-export" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>var_export</refname>
<refpurpose>Выводит или возвращает интерпретируемое строковое представление переменной</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>null</type></type><methodname>var_export</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>return</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<simpara>
<function>var_export</function> возвращает структурированную информацию о
данной переменной. Функция аналогична <function>var_dump</function>
за одним исключением: возвращаемое представление является полноценным PHP-кодом.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
Переменная, которую необходимо экспортировать.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>return</parameter></term>
<listitem>
<para>
Если передано и значение равно &true;, <function>var_export</function> вернёт
представление переменной вместо его вывода.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает представление переменной, если параметр <parameter>return</parameter>
передан и равен &true;. В противном случае функция возвращает &null;.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
Имена экспортируемых классов теперь полностью определены;
ранее ведущий обратный слеш опускался.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
Теперь объекты <classname>stdClass</classname> экспортируются в виде массива, приведённого
к объекту (массив <code>(object) array( ... )</code>), вместо использования
несуществующего метода <methodname>stdClass::__setState</methodname>.
Практический эффект заключается в том, что теперь <classname>stdClass</classname> можно
экспортировать, и полученный код будет работать даже в более ранних версиях
PHP.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры использования <function>var_export</function></title>
<programlisting role="php">
<![CDATA[
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)
]]>
</screen>
<programlisting role="php">
<![CDATA[
<?php
$b = 3.1;
$v = var_export($b, true);
echo $v;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
3.1
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Экспорт stdClass с PHP 7.3.0</title>
<programlisting role="php">
<![CDATA[
<?php
$person = new stdClass;
$person->name = 'ElePHPant ElePHPantsdotter';
$person->website = 'https://php.net/elephpant.php';
var_export($person);
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
(object) array(
'name' => 'ElePHPant ElePHPantsdotter',
'website' => 'https://php.net/elephpant.php',
)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Экспорт классов</title>
<programlisting role="php">
<![CDATA[
<?php
class A { public $var; }
$a = new A;
$a->var = 5;
var_export($a);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
A::__set_state(array(
'var' => 5,
))
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Использование <link linkend="object.set-state">__set_state()</link></title>
<programlisting role="php">
<![CDATA[
<?php
class A
{
public $var1;
public $var2;
public static function __set_state($an_array)
{
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(A)#2 (2) {
["var1"]=>
int(5)
["var2"]=>
string(3) "foo"
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Переменные типа <type>resource</type> не могут быть экспортированы
с помощью этой функции.
</para>
</note>
<note>
<para>
<function>var_export</function> не обрабатывает циклические ссылки, так как
было бы почти невозможно сгенерировать интерпретируемый PHP-код для такого случая.
Если необходимо производить какие-то действия с полным представлением массива
или объекта, используйте функцию <function>serialize</function>.
</para>
</note>
<warning>
<para>
До версии PHP 8.2.0, когда функция <function>var_export</function> экспортировала объекты,
ведущий обратный слеш не добавлялся в имя класса с указанным
пространством имён для наилучшей обратной совместимости.
</para>
</warning>
<note>
<para>
Для того, чтобы можно было использовать сгенерированный <function>var_export</function>
PHP-код, необходимо, чтобы все затронутые объекты реализовывали
магический метод <link linkend="object.set-state">__set_state</link>. Единственное исключение — <classname>stdClass</classname>, который экспортируется с использованием массива, приведённого к объекту.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>print_r</function></member>
<member><function>serialize</function></member>
<member><function>var_dump</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->