Передать параметр by reference между методами разных классов

Добрый день!

Есть ли причины, чтобы передача параметров функции по референсу не работала между классами?

У меня примерно такой код:
class One {
    function foo($a, &$var, $c)
    {
        $var++;
    }
}

class Two {
    function bar() {
        $b=5;
        $oOne = new One();
        $oOne->foo(1, $b, 3);
        echo $b;
    }
}

$oTwo = new Two();
$oTwo->bar();

В www.tehplayground.com/#ja9CHhWZ5 он работает (выводит 6), а в моём плагине в рамках LS, когда разношу по классам, унаследованным от Module, почему-то возвращается 5.

(естественно, мне это надо не для того, чтобы 5 на 1 увеличивать :), но если даже 5 не получается, то и мой код не сработает — буду вынужден заворачивать возврат из функции в объект и т.п.)

5 комментариев

avatar
он работает (выводит 6), а в моём плагине в рамках LS, когда разношу по классам, унаследованным от Module, почему-то возвращается 5.
потому что вызываются они не напрямую, а через ядро и передача параметров по ссылке не поддерживается.

удивляюсь, все же давно написано:
Передача параметров по ссылке между модулями в LiveStreet

в закладки добавьте и ищите чаще, там же поиск есть.
avatar
Понял, значит дохлый номер, спасибо!

PS Способность удивляться — признак молодости духа, рад за вас ;) А сайт учту, спасибо.
avatar
Можно при передаче параметр завернуть в массив (или создать специальный объект), а уже в нем указать явную ссылку:
$var=5;
$this->One_Foo($a,array(&$var),$c);
  • ort
  • +1
avatar
Ух ты, интересный подход, спасибо!
avatar
айай. а красиво ли это? я специально умолчал чтобы люди не строили такие вещи.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.