Почему в приведенном ниже упрощенном примере системных плагинов, передача по ссылке ($ data) не работает ($ content не изменяется)?Передача по ссылке не работает должным образом
class Plugins
{
public static function runhook()
{
$args = func_get_args();
$hook = array_shift($args);
foreach ($args as &$a); // be able to pass $args by reference
call_user_func_array(array('Plugin', $hook), $args);
}
}
class Plugin
{
public static function modifData(&$data)
{
$data = 'Modified! :'.$data;
}
}
class Application
{
public $content;
public function __construct()
{
$this->content = 'Content from application...';
}
public function test()
{
echo $this->content; // return 'Content from application...'
Plugins::runHoook('modifData', $this->content);
echo $this->content; // return 'Content from application...' instead of 'Modified! :Content from application...'
}
}
$app = new Application();
$app->test();
Как вы можете видеть $ this-> содержание должно быть изменено modifData() вызывается в фоновом режиме, runHook() функции класса Plugin. Но по какой-то странной причине ничего не ожидается, и переменная остается застрявшей в его первоначальном состоянии ... Может, я ошибаюсь?
Заранее спасибо за любую помощь ...
'Плагины :: runHoook' не должны быть' Plugins :: runHook'? –
Это потому, что вы только передаете ссылку на класс Plugin. Плагины :: runHook не получают ссылку – Pinoniq
FWIT, вы можете просто передать весь объект, потому что объекты всегда передаются по ссылке. –