Files
php-doc-ru/reference/ffi/ffi.cdata.xml
2024-06-14 17:02:33 +01:00

168 lines
5.5 KiB
XML
Raw Permalink 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: 45c797bd7413baed39367e79d82867cb943e76c4 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.ffi-cdata" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Доступ к данным C</title>
<titleabbrev>FFI\CData</titleabbrev>
<partintro>
<!-- {{{ FFI\CData intro -->
<section xml:id="ffi-cdata.intro">
&reftitle.intro;
<para>
С объектами <classname>FFI\CData</classname> работают как со стандартными PHP-данными:
<itemizedlist>
<listitem>
<simpara>
Данные языка C скалярных типов считываются и присваиваются
через свойство <property>$cdata</property>:
<code>$x = FFI::new('int'); $x-&gt;cdata = 42;</code>
</simpara>
</listitem>
<listitem>
<simpara>
К полям структур (struct) и объединений (union) языка C
получают доступ как к свойству объекта PHP:
<code>$cdata-&gt;field</code>
</simpara>
</listitem>
<listitem>
<simpara>
К элементам массива C получают доступ как к элементам массива PHP:
<code>$cdata[$offset]</code>
</simpara>
</listitem>
<listitem>
<simpara>
Массивы C перебирают через языковую конструкцию &foreach;.
</simpara>
</listitem>
<listitem>
<simpara>
На массивах языка C вызывают функцию <function>count</function>.
</simpara>
</listitem>
<listitem>
<simpara>
Указатели C разыменовывают как массивы: <code>$cdata[0]</code>
</simpara>
</listitem>
<listitem>
<simpara>
Указатели C сравнивают стандартными операторами сравнения (<code>&lt;</code>,
<code>&lt;=</code>, <code>==</code>, <code>!=</code>, <code>&gt;=</code>, <code>&gt;</code>).
</simpara>
</listitem>
<listitem>
<simpara>
Для указателей языка C разрешны операции инкремента и декремента
<code>+</code>/<code>-</code>/
<code>++</code>/<code>--</code>: <code>$cdata += 5</code>
</simpara>
</listitem>
<listitem>
<simpara>
Указатели C вычитают стандартной операцией <code>-</code>.
</simpara>
</listitem>
<listitem>
<simpara>
Указатели C на функции вызывают как стандартные PHP-замыкания: <code>$cdata()</code>
</simpara>
</listitem>
<listitem>
<simpara>
Данные C клонируют оператором <link linkend="language.oop5.cloning">clone</link>:
<code>$cdata2 = clone $cdata;</code>
</simpara>
</listitem>
<listitem>
<simpara>
Данные языка C визуализируют через функции
<function>var_dump</function>, <function>print_r</function>, и т. д.
</simpara>
</listitem>
<listitem>
<simpara>
Начиная с PHP 8.3.0 объекты класса <classname>FFI\CData</classname> разрешено присваивать структурам и полям.
</simpara>
</listitem>
</itemizedlist>
<note>
<simpara>
Обратите внимание, что экземпляры
класса <classname>FFI\CData</classname> не поддерживают
языковые конструкции <function>isset</function>,
<function>empty</function> и <function>unset</function>,
и что обёрнутые структуры и объединения C не реализуют интерфейс
<interfacename>Traversable</interfacename>.
</simpara>
</note>
</para>
</section>
<!-- }}} -->
<section xml:id="ffi-cdata.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis class="class">
<ooclass>
<modifier>final</modifier>
<classname>FFI\CData</classname>
</ooclass>
</classsynopsis>
<!-- }}} -->
</section>
<section role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.3.0</entry>
<entry>
Объекты класса <classname>FFI\CData</classname> теперь разрешено присваивать структурам и полям.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
</partintro>
<!-- &reference.ffi.entities.ffi-cdata; -->
</reference>
<!-- 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
-->