The ultra mapper have to process from any:
- flat array
- array
- anonymous object
- class object (by reflection class/constructor/public properties/getters and setters)
to any
- flat array
- array
- anonymous object
- class object (by reflection class/constructor/public properties/getters and setters)
each can be combined with any of them
-
# null null;
-
# boolean true; false;
-
# int 0; 1; 2; # {...}
-
# string "some string";
-
# array [ "a" => ["b" => "c"] ]; # flat array [ "a.b" => "c" ]
-
# object (object) [ 0 => "a", 1 => "b", 2 => "c", # {...} ]; (object) [ "a" => "b" ];
-
# class object which wrappes another data type new DateTime($datetime); new ArrayObject($arr);
-
# class object class Test { private string $name; }
-
# collection of any data type [ new Test(), new Test() ]; [ "a", "b", "c" #, {...} ];
Dane są obsługiwane w ramach 4 zmiennych: źródła, elementu kolekcji, celu oraz zmiennej zastępczej. Ta ostatnia jest opcjonalna i może zostać wykorzystana gdy niezbędny jest do wykonania callback na przypisywanej wartości.
name | includes | example | description |
---|---|---|---|
{{function.name}} |
handleData |
Nazwa funkcji wykonującej mapowanie. Taka funkcja przyjmuje dane oraz dowolne inne argumenty, np. indeks w pętli, oraz zwraca dane wyjściowe. | |
{{source.name}} |
$data |
Źródło danej wartości | |
{{source.propertyName}} |
property |
Nazwa właściwości w źródle | |
{{source.getter}} |
{{source.name}}['{{source.propertyName}}'] / {{collection.callback}} |
Określa sposób pobrania wartości z źródła | |
{{collection.index}} |
$item |
Indeks danej w kolekcji | |
{{collection.item}} |
$item |
Źródło danej wartości w kolekcji | |
{{collection.callback}} |
$this->{{function.name}}({{collection.item}}, {{collection.index}}) |
Określa sposób wywołania funkcji callback na elemencie kolekcji | |
{{target.name}} |
$output |
Opis zmiennej wyjściowej | |
{{target.init}} |
$output = new Test(); |
Inicjator zmiennej wyjściowej | |
{{target.propertyName}} |
property |
Nazwa właściwości wyjściowej | |
{{target.setter}} |
{{target.name}}['{{target.propertyName}}'] = {{source.getter}}; |
Określa sposób przypisania wartości wyjściowej | |
{{var.name}} |
$var |
Nazwa zmiennej zastępczej | |
{{var.setter}} |
$var = {{source.getter}}; |
Sposób przypisania zmiennej zastępczej | |
{{var.getter}} |
$var |
Sposób pobrania wartości z zmiennej zastępczej | |
{{meta}} |
$meta |
Specjalna zmienna przechowująca meta informacje dla wybranej właściwości. Znajdą się tutaj takie dane jak: pełna ścieżka własciwości, indeks w kolekcji i wszystkie inne dane niezbędne w procesie mapowania. Pomysł: przechowywanie wyjątków, żeby potem zwrócić je zbiorczo. |
/**
* The `X765` part is some random string builded on hash of the full classname.
* Classes `App\Test` and `\AppTest` could has the same function name.
*
* @param array<string, mixed> $source
* @param Meta $meta includes path to root or anything else required by mapping process
*
* @return App\Test
*/
private function mapAppTestX765(array $source, Meta $meta): Test
{
static $ref_565f49f2 ??= new ReflectionClass(App\Test::class);
/** @var App\Test $output */
$output = $ref_565f49f2->newInstanceWithoutConstructor();
if (array_key_exists('name', $source)) {
$ref_565f49f2->getProperty('name')->setValue($output, $source['name']);
}
return $output;
}
The exception code are started from 5920
- z zmiennej
$source
- z wartości domyślnej
- z wywołania funkcji inicjalizującej
- do zmiennej
$target
- do zmiennej
$var
- dowolna akcja na zmiennej
$var
- przypisanie zmiennej
$var
do zmiennej$target
- dowolna akcja kończąca