Вы не можете использовать func_get_args()
, потому что, как говорится в руководстве, он не возвращается по ссылке:
Возвращает массив, в котором каждый элемент является копия соответствующего члена списка аргументов текущей пользовательской функции.
Из проверки видно, что func_get_arg()
ведет себя так же.
Единственный способпоручить PHP предоставить аргумент по ссылке на функцию с помощью &
в списке аргументов функции.Поскольку у вас нет списка аргументов, то, что вы хотите, невозможно.
Это также отвратительный !Передача по ссылке в PHP чревата проблемами , и ее следует избегать.
Однако, если вы хотите изменить свою подпись some_method()
, вы можете сделать следующее:
class some_class {
private $_some_stuff = array();
public function some_method(&$args) // notice we accept a single arg by reference
{
foreach ($args as &$arg) {
$this->_some_stuff[] =& $arg;
}
}
public function other_method()
{
for ($i = 0; $i < count($this->_some_stuff); $i++)
{
$this->_some_stuff[$i] = 'somevalue';
}
}
}
$some_object = new some_class();
$one = 'firstever';
$two = 'secondever';
// now whenever you call this method, use this EXACT PATTERN:
$args = array(&$one, &$two); // this MUST be its own statement on its own line, and MUST have referenced elements!
$some_object->some_method($args); // CANNOT do $some_object->some_method(array(&$one, &$two)); !!!
$some_object->other_method();
var_dump($some_object);
var_dump($args);
var_dump($one);
var_dump($two);
Это будет делать то, что вы хотите.
Также обратите внимание, что передача по ссылке во время вызова (thefunc(&$foo);
) устарела и может больше не работать.