Следующие работы (также с объектами и т.д.):
$b = new stdClass();
$b->a = "foo";
$b->b = "bar";
$example = function () use ($b) {
echo $b->b;
};
$example();
Есть ли какой-то синтаксический трюк для передачи некоторого свойства объекта/члена массива и одновременного назначения его новой переменной без определения этой переменной во внешней области?
Этот пример псевдокод должен продемонстрировать, что я имею в виду:
$b = new stdClass();
$b->a = "foo";
$b->b = "bar";
$example = function () use ($b->b as $prop) {
echo $prop;
};
$example();






Если вы имеете в виду выполнение этого действия внутри оператора предложения «использовать» замыкания, я считаю, что ответ отрицательный. Все, что делает предложение «использовать», — это дает вашему закрытию доступ к (а) переменной (переменным), которые уже находятся в родительской области.
Если вы хотите изменить фактическое значение переменной, которую вы включаете через «использование», вы можете передать ее по ссылке, чтобы изменить исходное значение во внешней области, но, насколько мне известно, внутри не разрешено присвоение этот оператор предложения «использовать», который позволит вам создать новую переменную, доступную в области закрытия, которая имеет значение исходной переменной во внешней области.
Почему бы просто не определить его как параметр и покончить с этим? То, что вы пытаетесь сделать, это именно то, что обычно делают функции.
Например. и следуя именно тому варианту использования, который вы представляете в своем вопросе:
$example = function ($prop) {
echo $prop;
};
$example($b->b);
Конечно, если вы хотите изменить переменную, вам просто нужно объявить ее как передачу по ссылке:
$anotherExample = function (&$prop) {
echo $prop;
};
use не делает то, что вы хотите, и в этом нет особого смысла. Простая передача параметров функции, которая является основной природой функций, решает эту «проблему».
Очень хорошо сказано