Можно ли унаследовать родительское свойство элемента области и назначить его внутренней переменной в выражении «use»? - PullRequest
0 голосов
/ 08 марта 2019

Следующие операции (также с объектами и т.переменная во внешней области видимости?

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

$b = new stdClass();

$b->a = "foo";
$b->b = "bar";

$example = function () use ($b->b as $prop) {
    echo $prop;
};
$example();

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Почему бы просто не определить его как параметр и покончить с этим?То, что вы пытаетесь сделать, это именно то, что функции делают нормально.

Например, и точно следуйте сценарию использования, который вы указали в своем вопросе:

$example = function ($prop) {
    echo $prop;
};

$example($b->b);

Конечно, если вы хотите изменитьпеременная, вам просто нужно объявить это как передачу по ссылке:

$anotherExample = function (&$prop) {
    echo $prop;
};

use не делает то, что вы хотите, и не имеет большого смысла, что это будет.Простая передача параметров в функцию, которая по своей сути является функцией, решает эту «проблему».

1 голос
/ 08 марта 2019

Если вы имеете в виду выполнение этого действия в операторе предложения замыкания 'use', я думаю, что ответ - нет.Все, что делает предложение «use», это дает закрытому доступу к (a) переменным (ам), которые уже находятся в родительской области видимости.

Если вы хотите изменить фактическое значение переменной, которую вы включаете, через «use», вы можете передать ее по ссылке, чтобы изменить исходное значение во внешней области видимости, но, насколько мне известно, тамвнутри этого оператора предложения 'use' не разрешено присваивание, которое позволило бы вам создать новую переменную, доступную в области замыкания, которая имеет значение исходной переменной во внешней области.

...