Как я могу сохранить переменную, передав ее по ссылке в PHP? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь понять концепцию ООП, введенную в PHP 7+ для Conflict Resolution. Я также хочу сделать динамический вызов save() в моем дизайне, который будет принимать аргумент по ссылке .

Чтобы проверить концепцию до того, как я создал это дополнение к моей платформе, я хотел попробовать основы простого вывода переменной zval.

Моя текущая черта выглядит так:

trait Singleton {
    # Holds Parent Instance
    private static  $_instance;
    # Holds Current zval
    private         $_arg;

    # No Direct Need For This Other Than Stopping Call To new Class
    private function __construct() {}

    # Singleton Design
    public static function getInstance() {
        return self::$_instance ?? (self::$_instance = new self());
    }

    # Store a reference of the variable to share the zval
    # If I set $row before I execute this method, and echo $arg
    # It holds the correct value, _arg is not saving this same value?
    public function bindArg(&$arg) { $this->_arg = $arg; }

    # Output the value of the stored reference if exists
    public function helloWorld() { echo $this->_arg ?? 'Did not exist.'; }
}

Затем я создал класс, который использует черту Singleton.

final class Test {
    use \Singleton { helloWorld as public peekabo; }
}

Я передал переменную, на которую хотел сослаться, примерно так, поскольку метод ожидает ссылку на переменную - его пока не нужно устанавливать.

Test::getInstance()->bindArg($row);

Теперь я хочу имитировать концепцию циклического прохода по строкам из результата базы данных, концепция заключается в том, чтобы разрешить добавление метода save() в мой проект, но на первом месте стоит разработка базовой концепции.

foreach(['Hello', ',', ' World'] as $row)
    Test::getInstance()->peekabo();

Проблема в том, что вывод выглядит так:

Did not exist.Did not exist.Did not exist.

Мой ожидаемый результат будет выглядеть так:

Hello, World

Как я могу сохранить zval внутри моего класса для последующего использования в отдельном методе?


Демонстрация для будущих зрителей, которые сейчас работают, благодаря ответам

Демонстрация этой работы для концепции базы данных, как я объяснил в вопросе здесь:

«Теперь я хочу имитировать концепцию циклического прохода по строкам из результата базы данных, концепция заключается в том, чтобы разрешить добавление метода save () в мой проект»

1 Ответ

0 голосов
/ 11 января 2019

Использование public function bindArg(&$arg) { $this->_arg = &$arg; } Работает с PHP 7.3

...