Variable variable е с два долара: $$w
----
$w['parent']()[0]
да не искаш да кажеш че това е името на функцията???
т.е. в $w['parent'] например се съдържа 'my_func'
а $w['parent']() тогава извиква my_func()
а пък $w['parent']()[0] връща нулевият елемент от резултата на масива на функцията??? my_func()[0] <---- това вече го разбрах че е новост в php5.4
Шантава работа..Така ли е наистина. Тук нещо понамерих:
https://www.php.net/manual/en/functions.variable-functions.php
ако наистина е така насочването беше успешно
и си заслужи бирата.
Макар, че go_fire те побутна в правилната посока и се ориентира сам, все пак да потвърдя, че поведението е такова.
Общо взето, както си установил, в PHP 5.4 вкараха "array dereferencing" на методи/функции които връщат нещо.
https://www.php.net/manual/en/migration54.new-features.phpВ твоя случай това ще рече, че след извикването на динамичната функция, PHP-то ще последва референцията където се намира масива в паметта и ще достъпи първия елемент.
Преди PHP 5.4 се налагаше резултата от функцията да се присвои на променлива.
GeSHi (PHP):
// PHP 5.3
<?php
function test_func() {
return array('Test was called');
}
$my_array = array('parent' => 'test_func');
$func_result = $my_array['parent']();
GeSHi (PHP):
// PHP 5.4
<?php
function test_func() {
return ['Test was called'];
}
$my_array = ['parent' => 'test_func'];
echo $my_array['parent']()[0];
Готиното на този синтакс е, че ти позволява да навързваш такива извиквания без да се налага да присвояваш резултата на всяка стъпка:
GeSHi (PHP):
$arr['parent']()[0]['child']()[1]
(не трябва да се прекалява обаче, понеже става трудно за четене и дебъгване)
И понеже предвиждам, че точно този синтакс ще ти докара ядове когато мигрираш към PHP 7+ ти пускам тази статия, която показва промените свързани с приоритета на изпълнение на подобни динамични извиквания:
https://www.atlantic.net/hipaa-compliant-cloud-storage/what-is-php7-breaking-changes-php5/и там секцията "Uniform Variable Syntax".
Ако те мързи да кликаш, това:
GeSHi (PHP):
$atlantic->$dot[‘net’]()
В PHP 5 се изпълнява с този приоритет:
GeSHi (PHP):
$atlantic->{$dot[‘net’]}()
А в PHP 7+ с този:
GeSHi (PHP):
($atlantic->$dot)[‘net’]()
Забавлявай се