toObj($arr) – преобразует массив в обьект и выведет его в результат метода
maskObj($arr) – превращает массив в многоуровневые объекты.
$arr - массив
сначала подключаем
use Foton\Module\Obj;
Затем создаем объект
$obj= new Obj();
Заранее создаем метод в контроллере mvc html
public function myMethod($text){ return $text.'-test'; }
Пример структуры массива:
<?php
$arr = array(
'::test#test'=>
array('var'=>
array(5,7),
'method'=>array(
'Controller\Site\html::myMethod#test2'=>array(
'var'=>['my string']
)
)
)
);
Теперь вызываем:
<?php
FotonArr($obj->maskObj($arr));
результат:
Array
(
[test_test] => 29
[myMethod] => my string-test
)
Разберем массив - ::test#test — так как в начале ::, то будет выполнен поиск метода ядра, если бы не было :: была бы вызвана функция php библиотеки. Например мы могли бы написать str_replace,
на уровень ниже мы указали Controller\Site\html::myMethod – и у нас подключился метод класса Controller\Site\html,
класс должен быть динамическим.
#test и #test2 – это комментарий к методу, если будут объявлены два одинаковых метода, то результаты перезапишутся, чтобы этого не произошло мы добавляем префикс.
Значением этого ключа, как и всех других в этом многомерном массиве является массив из двух ключей:
var — массив сигнатур метода,
method – массив из новых методов, который состоит также из ключа — метода и значения массива var=>array(),method=>array() и т. д.
Для использования результата предыдущего метода, как значения сигнатуры следующего в массиве var в ключе необходимо указать название метода заменив # на _,
а также, если есть класс метода, то и его указываем в начале, вот так вот, например Controller\Test_test, в значении укажем любое значение, обычно 1.
Значение результата метода изменяются каскадно, поэтому их можно использовать несколько раз.
Например такой массив:
<?php
$arr = array(
'::test#test'=>
array(
'var'=>array(5,7),
'method'=>array(
'Controller\Site\html::myMethod#test2'=>array(
'var'=>['my string']
),
'::test#test3'=>array(
'var'=>['test_test'=>1,12]
)
)
)
);
выдаст после обработки:
Array
(
[test_test] => 29
[myMethod_test2] => my string-test
[test_test3] => 58
);
Как мы видим test_test3 = 58, это результат значения метода $this→core→test с аргументами array(5,7) и числа 12, мы повторно запустили тот же метод но уже с другими значениями аргументов
Если же мы запустим
<?php
$arr = array(
'::test#test'=>
array(
'var'=>array(5,7),
'method'=>array(
'Controller\Site\html::myMethod#test2'=>array(
'var'=>['my string']
),
'Controller\Site\html::myMethod#test3'=>array(
'var'=>['myMethod_test2'=>1]
)
)
)
);
то получим:
Array
(
[test_test] => 29
[myMethod_test2] => my string-test
[myMethod_test3] => my string-test-test
);
Теперь у нас 2 раза отработает метод myMethod
maskToObj($arr) — метод аналогичный maskObj($arr) только результатом будет не массив,а объект.
dumpObj($arr, $obj = null) — метод является оберткой над всеми тремя методами.
Если в аргументе $obj указать O будет вызван метод maskToObj($arr),
если A maskObj($arr),
если же мы ничего не укажем у нас вызовется метод toObj(maskObj($arr)) — в результате мы получим обьект со всеми результатами в свойствах корневого обьекта на одном уровне
Эти методы хорошо подходят для тестирования, подготовки архитектуры и проверки связей будущего микросервисного приложения либо любой другой системы, так как позволяют визуально создать понятную структуру связей между методами и обьектами.