Framework Foton
Инструмент для профессиональной разработки web приложений

toObj($arr) – преобразует массив в обьект и выведет его в результат метода

maskObj($arr) – превращает массив в многоуровневые объекты.

$arr - массив

сначала подключаем 

use FotonModuleObj;

Затем создаем объект 

$obj= new Obj();

Заранее создаем метод в контроллере mvc html

public function myMethod($text){  return $text.'-test'; }

Пример структуры массива:

<?php
$arr = array(
	'::test#test'=>
		array('var'=>
			array(5,7),
			'method'=>array(
				'ControllerSitehtml::myMethod#test2'=>array(
					'var'=>['my string']
				)
			)
		)
);

Теперь вызываем:

<?php
FotonArr($obj->maskObj($arr));

результат:

Array
(
    [return] => Array
        (
            [test_test] => 12
            [myMethod_test2] => my string-test
        )

    [time] => Array
        (
            [test_test] => 0.033
            [myMethod_test2] => 0
        )

);

Разберем массив - ::test#test — так как в начале ::, то будет выполнен поиск метода ядра, если бы не было :: была бы вызвана функция php библиотеки. Например мы могли бы написать str_replace,
на уровень ниже мы указали ControllerSitehtml::myMethod – и у нас подключился метод класса  ControllerSitehtml,
класс должен быть динамическим.
#test и #test2 – это комментарий к методу, если будут объявлены два одинаковых метода, то результаты перезапишутся, чтобы этого не произошло мы добавляем префикс. 
Значением этого ключа, как и всех других в этом многомерном массиве является массив из двух ключей:
var — массив сигнатур метода,
method – массив из новых методов, который состоит также из ключа — метода и значения массива var=>array(),method=>array() и т. д.
Для использования результата предыдущего метода, как значения сигнатуры следующего в массиве var в ключе необходимо указать название метода заменив # на _,
а также, если есть класс метода, то и его указываем в начале, вот так вот, например  ControllerTest_test, в значении укажем любое значение, обычно 1.
Значение результата метода изменяются каскадно, поэтому их можно использовать несколько раз.
Например такой массив:

<?php
$arr = array(
	'::test#test'=>
	array(
		'var'=>array(5,7),
		'method'=>array(
			'ControllerSitehtml::myMethod#test2'=>array(
				'var'=>['my string']
			),
			'::test#test3'=>array(
				'var'=>['test_test'=>1,12]
			)
		)
	)
);

выдаст после обработки:

Array
(
    [return] => Array
        (
            [test_test] => 12
            [myMethod_test2] => my string-test
            [test_test3] => 24
        )

    [time] => Array
        (
            [test_test] => 0.026
            [myMethod_test2] => 0
            [test_test3] => 0
        )

);

Как мы видим test_test3 = 24, это результат значения метода $this→core→test с аргументами array(5,7) и числа 12, мы повторно запустили тот же метод но уже с другими значениями аргументов
Если же мы запустим

<?php
$arr = array(
	'::test#test'=>
	array(
		'var'=>array(5,7),
		'method'=>array(
			'ControllerSitehtml::myMethod#test2'=>array(
				'var'=>['my string']
			),
			'ControllerSitehtml::myMethod#test3'=>array(
				'var'=>['myMethod_test2'=>1]
			)
		)
	)
);

то получим:

Array
(
    [return] => Array
        (
            [test_test] => 12
            [myMethod_test2] => my string-test
            [myMethod_test3] => my string-test-test
        )

    [time] => Array
        (
            [test_test] => 0.033
            [myMethod_test2] => 0
            [myMethod_test3] => 0
        )

);

Теперь у нас 2 раза отработает метод  myMethod

maskToObj($arr) — метод аналогичный maskObj($arr) только результатом будет не массив,а объект.

Вывод тайминга отработки методов выполняется только в формате массива,
если же у нас создается объект, то он содержит только доступ к результатам методов.

dumpObj($arr, $obj = null) — метод является оберткой над всеми тремя методами.
Если в аргументе $obj указать  O будет вызван метод maskToObj($arr),
если A maskObj($arr),
если же мы ничего не укажем у нас вызовется метод toObj(maskObj($arr)) — в результате мы получим обьект со всеми результатами в свойствах корневого обьекта на одном уровне


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


Также мы можем добавлять обработку микросервисов с помощью разделителя @

<?php
$arr = array(
        	'::test#test'=>
        	array(
        		'var'=>array(5,7),
        		'method'=>array(
        			'ControllerSitehtml::myMethod#test2'=>array(
        				'var'=>['my string']
        			),
        			'ControllerSitehtml::myMethod#test3'=>array(
        				'var'=>['myMethod_test2'=>1]
        			)
        		)
        	),
			'service@servicemicro'=>
			[
				'var'=>['test1'=>'test2']
			]
        );

Например вот здесь будет вызываться микросервис service с комментарием servicemicro и параметрами ['test1'=>'test2']

© Copyright 2017 - 2026 Разработано на Framework Foton
Продукт зарегистрирован в Роспатенте