Работа с типами
О том, как работать с разными типами данных в .NET из PHP
У продвинутого пользователя может возникнуть вопрос о том, как работает синхронизация типов между PHP и .NET. Довольно интересный вопрос, учитывая, что PHP - язык динамически типизированный, а .NET - статически
На самом деле всё довольно таки просто. При обращении к VoidCore все типы данных автоматически приводятся к нужному типу. Работает это по следующей схеме:
При обращении к методам .NET VoidCore приводит все параметры к контекстным значениям. К примеру, Вы пытаетесь вызвать метод MessageBox.Show (string message, string caption)
. В таком случае VoidCore видит, что вы ввели два аргумента (VoidCore::callMethod ($messageBox, '123', 'test')
) и при этом в .NET оба эти аргумента являются строками. Ну так он возьмёт тогда и приведёт эти аргументы к строкам, а если это не получилось - ну, на этом его полномочия всё
При получении результата VoidCore, соответственно, смотрит на возвращаемый тип. К примеру, мы пытаемся получить родителя какого-то объекта Form: Form.Parent
. При этом VoidCore видит, что значение этого параметра - объект. Тогда он создаст указатель (selector) на этот объект и вернёт его PHP для дальнейшей работы
Указание предпочитаемого типа
Помимо автоматического приведения типов VoidCore предоставляет возможность использовать ручное приведение типа при вызове какого-то VoidCore-метода. Для этого при передаче аргументов используйте конструкцию вида array (параметр, тип)
. При этом в качестве типа нужно использовать одну из представленных констант:
Константа
Описание
VC_STRING
Строка (string)
VC_INT
Число (int)
VC_BOOL
Логическая переменная (bool)
VC_OBJECT
VoidCore объект (selector)
VC_DOUBLE
Число с плавающей запятой (double)
VC_COLOR
Цвет
VC_FLOAT
Число с плавающей запятой (float)
VC_HANDLE
Handle окна (handle)
VC_CHAR
Символ (char)
VC_BYTE
Байт (byte)
VC_NULL
null
Так же возможно указать предпочитаемый тип возвращаемого значения в "методах-геттерах" и вызове метода VoidCore объекта. Для этого в названиях нужно использовать конструкцию, описанную выше
Учтите, что типы VC_FLOAT, VC_CHAR и VC_BYTE нельзя указывать в качестве предпочитаемого возвращаемого VoidCore-методом типа
К примеру:
VoidCore::convert
int VoidCore::convert (scalar $object, string $class) — приведение объекта к указанному типу и возвращение указателя на него
Аргумент
Описание
scalar $object
Указатель на объект или значение для приведения
string $class
Полный .NET класс типа
Пример:
Last updated
Was this helpful?