Читая исходный код Laravel Framework, я наткнулся на этот код
set_error_handler(function ($type, $msg) use (&$error) {
$error = $msg;
});
в функции move()
класса UploadedFile
пакета symfony/http-foundation
, который Laravel использует Здесь
Расширение Intelephense на VSCode вызывает предупреждение
Неопределенная переменная '$ error'
Приносим свои извинения за скриншот кода (на всякий случайэто ошибка в расширении, и вы не можете воспроизвести ее, пожалуйста, скажите мне) Извините
При исследовании этого я обнаружил этоответ , который передает использование замыкания в set_error_handler
$that = $this;
set_error_handler( function() use ($that) { $that->customErrorHandler(); } );
Насколько я понимаю, customErrorHandler()
- это функция в том же классе или контексте, и ее необходимо определить вне вызова
Поиск аналогичного примера в официальных документах дает те же результаты, см. Здесь
Но класс Symfony UploadedFile
определяет только частное свойство $error
, глобальное для класса, поэтомуне должно ли быть так?
$error = $this->error;
set_error_handler(function ($type, $msg) use (&$error) {
$error = $msg;
});
Как дела? Знает ли этот код, чтобы получить переменную $error
из свойства, не определяя его? *
*, если он получает его оттуда, в противном случае ...
Как передается $error
Вот? undefined
предупреждение законно? учитывая, что код действительно работает (просто любопытно)