International PHP Conference Berlin 2025

Доступ к данным C

(PHP 7 >= 7.4.0, PHP 8)

Введение

С объектами FFI\CData работают как со стандартными PHP-данными:

  • Данные языка C скалярных типов считываются и присваиваются через свойство $cdata: $x = FFI::new('int'); $x->cdata = 42;
  • К полям структур (struct) и объединений (union) языка C получают доступ как к свойству объекта PHP: $cdata->field
  • К элементам массива C получают доступ как к элементам массива PHP: $cdata[$offset]
  • Массивы C перебирают через языковую конструкцию foreach.
  • На массивах языка C вызывают функцию count().
  • Указатели C разыменовывают как массивы: $cdata[0]
  • Указатели C сравнивают стандартными операторами сравнения (<, <=, ==, !=, >=, >).
  • Для указателей языка C разрешны операции инкремента и декремента +/-/ ++/--: $cdata += 5
  • Указатели C вычитают стандартной операцией -.
  • Указатели C на функции вызывают как стандартные PHP-замыкания: $cdata()
  • Данные C клонируют оператором clone: $cdata2 = clone $cdata;
  • Данные языка C визуализируют через функции var_dump(), print_r(), и т. д.
  • Начиная с PHP 8.3.0 объекты класса FFI\CData разрешено присваивать структурам и полям.

Замечание: Обратите внимание, что экземпляры класса FFI\CData не поддерживают языковые конструкции isset(), empty() и unset(), и что обёрнутые структуры и объединения C не реализуют интерфейс Traversable.

Обзор класса

final class FFI\CData {
}

Список изменений

Версия Описание
8.3.0 Объекты класса FFI\CData теперь разрешено присваивать структурам и полям.
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top