Ссылка на переменную как аргумент функции - PullRequest
0 голосов
/ 03 декабря 2011

Все о Zend-приложении с помощником действий.

Я хочу удалить некоторые пары массива с помощью функции.

helper:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...]
{    
    public function direct(&$array)
    {
        if(isset($array['key']))
            unset($array['key']);
    }
}

controller:

$this->_helper->TestHelper($var);

Как мне заставить его работать?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Поскольку вы теперь передаете по ссылке, вы можете изменить переменную в методе, и изменения будут применены к исходной переменной. Однако, как у вас сейчас, вы вообще не меняете переменную, а просто возвращаете результат выражения, как в первом примере. У вас должно быть что-то вроде этого:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...] {
    public function direct(&$var) {
        $var = $var + 1;
    }
}
0 голосов
/ 04 декабря 2011

Вы также должны передать его как ссылку :
$this->_helper->TestHelper(&$var);

UPDATE: Ups, у меня были отключены мои ошибки. Вы (и теперь я) получаете сообщение об ошибке , потому что ...

При вызове функции отсутствует ссылочный знак - только для функции определения. Одних только определений функций достаточно для правильной передачи аргумент по ссылке. Начиная с PHP 5.3.0 вы получите предупреждение говоря, что "передача по времени вызова по ссылке" устарела, когда вы используете & в foo (& $ a) ;.

HelperBroker ZF использует return call_user_func_array(array($helper, 'direct'), $args); для вызова вашего метода direct (). Проверьте документы , но кажется, что call_user_func_array проходит по ссылке, хотя и с несколькими причудами.

Зацените этот ответ .

...