Создание указателей

О том, как создавать указатели на объекты, статичные классы и делегаты

VoidCore::createObject

int VoidCore::createObject (string $objectName[, mixed $objectGroup = false[, ...$args]]) — создание .NET объекта

Аргумент

Описание

string $objectName

Класс .NET объекта для создания (к примеру, System.Windows.Forms.Form)

mixed $objectGroup = false

Сборка класса (к примеру, System.Windows.Forms)

...$args

Список аргументов для конструктора объекта

По умолчанию сборка создаваемого объекта равна false. Это означает, что VoidCore сам попытается найти подходящую сборку для объекта. Вы так же можете указать собственную сборку

В качестве второго аргумента (сборки объекта) можно передать:

  • true, null или пустая строка - поиск сборки объекта только в VoidCore и mscorlib

  • false - поиск сборки объекта "везде, где он вообще может находиться" (c)

  • не пустая строка будет воспринята как сборка объекта

Изначально поиск сборки объекта происходит в папке с программой (VoidCore.exe), а затем - в рабочей директории

Если сборка объекта не была найдена автоматически VoidCore попытается использовать в качестве сборки объекта его полное название, обрезанное до последней точки, то есть, к примеру, у класса "System.Windows.Forms.Form" сборка будет "System.Windows.Forms" (от начала до последней точки, перед "Form")

Если сборка не была найдена - VoidCore выдаст ошибку о том, что объект не найден, а так же укажет на то, каким методом он пытался найти сборку объекта

В дальнейшем данная инструкция будет актуальна для всех параметров сборки. Так же учтите, что этот параметр не является обязательным и изначально равен false

Пример:

script.php
<?php

# Самый простой способ создать объект
$object1 = VoidCore::createObject ('System.Windows.Forms.Form');

# Тоже самое что и выше, но с лишними телодвижениями
$object2 = VoidCore::createObject ('System.Windows.Forms.Form', false);

# А эти способы выдадут ошибку т.к. данный класс не входит
# ни в сборку VoidCore, ни в сборку mscorlib
$object3 = VoidCore::createObject ('System.Windows.Forms.Form', true);
$object4 = VoidCore::createObject ('System.Windows.Forms.Form', null);
$object5 = VoidCore::createObject ('System.Windows.Forms.Form', '');

# Создание объекта с указанием его сборки
$object6 = VoidCore::createObject ('System.Windows.Forms.Form', 'System.Windows.Forms');

VoidCore::getClass

int VoidCore::getClass (string $className[, mixed $classGroup = false]) — создание указателя для работы со статичным .NET классом

Аргумент

Описание

string $className

Полное название .NET класса

mixed $classGroup = false

Сборка класса

Пример:

script.php
<?php

$class = VoidCore::getClass ('System.Windows.Forms.MessageBox');

Далее под VoidCore (.NET) объектами и указателями на них так же будут и подразумеваться указатели на статичные классы

VoidCore::createDelegate

int VoidCore::createDelegate (string $type, callable $function) — создание анонимной функции (делегата)

Аргумент

Описание

string $type

Тип делегата (полный .NET класс)

callable $function

PHP коллбэк для выполнения

Пример:

script.php
<?php

$delegate = VoidCore::createDelegate ('System.Func`2[System.Int32, System.String]', function ($number)
{
    return 'The number is '. $number;
});

# Выведет сообщение "The number is 228"
# Метод callMethod см. в "Управление указателями"
echo VoidCore::callMethod ($delegate, 'Invoke', 228);

VoidCore::typeof

int VoidCore::typeof (string $objectName[, mixed $objectGroup = false]) — создание экземпляра типа объекта

Аргумент

Описание

string $objectName

Полный .NET класс объекта

mixed $objectGroup = false

Сборка объекта

Пример:

script.php
<?php

$type = VoidCore::typeof ('System.Windows.Forms.Button');

# Выведет "System.Windows.Forms.Button"
# Метод callMethod см. в "Управление указателями"
echo VoidCore::callMethod ($type, 'ToString');

VoidCore::importObject

int VoidCore::importObject (string $data) — импорт объекта в ядро

Аргумент

Описание

string $data

Сериализированные данные ядра

VoidCore::exportObject

string VoidCore::exportObject (int $selector) — экспорт объекта из ядра

Аргумент

Описание

int $selector

Указатель объекта

Примеры для импорта и экспорта объектов:

script.php
<?php

# Создаём список строк
$list = VoidCore::createObject ('System.Collections.Generic.List`1[System.String]');

# Добавляем 3 элемента
# Метод callMethod см. в "Управление указателями"
VoidCore::callMethod ($list, 'Add', 'a');
VoidCore::callMethod ($list, 'Add', 'b');
VoidCore::callMethod ($list, 'Add', 'c');

# Экспортируем список в строку (base64 строку)
$export = VoidCore::exportObject ($list);

# Удаляем оригинальный объект
# Метод removeObjects см. в "Управление указателями"
VoidCore::removeObjects ($list);

# Импортируем список из строки
$list = VoidCore::importObject ($export);

# Выводим второй элемент импортированного списка ("b")
# Метод getArrayValue см. в "Работа с массивами"
echo VoidCore::getArrayValue ($list, 1);

VoidCore::createThread

int VoidCore::createThread (callable $callback, ...$args) — создание .NET потока для анонимной функции

Аргумент

Описание

callable $callback

PHP коллбэк для выполнения в потоке

...$args

Аргументы коллбэка

Пример:

script.php
<?php

# Создаём поток
$thread = VoidCore::createThread (function ()
{
    # В потоке создаём класс test
    class test
    {
        # Добавим классу статичную переменную
        static $example = '123';
    }
});

# Метод callMethod см. в "Управление указателями"
VoidCore::callMethod ($thread, 'Start'); // Запустим поток
VoidCore::callMethod ($thread, 'Join');  // Объединим память потока с памятью главного потока

echo test::$example; // Выведет "123"

Last updated

Was this helpful?