Вопрос пользователя Дмитрий Маретов в уроке «Исключения», курс «PHP: Введение в ООП»

Дмитрий Маретов

Первое: непонятно было как вызвать стандартную функцию json_decode в пользовательской функции json_decode. Увидел в обсуждении ответ, что надо поставить перед названием стандартной функции обратный слэш "\". В том же ответе дается ссылка на урок про неймспейсы, но там нет такой информации (наверное стоит добавить). И насколько мне известно нельзя называть пользовательские функции так же, как стандартные. Или все-таки можно? Если нельзя, то почему в уроке нарушается это правило?

Второе: почему изменился синтаксис "throw new \Exception()". До сих пор экземпляр класса создавался без обратного слеша. И в мануале в примере тоже написано без слеша. На репле работает и так, и так. А при проверке задачи без слэша не работат.

2 3

Nikolai Gagarinov

Дима, привет. Ответ на твой вопрос здесь - https://www.php.net/manual/en/language.namespaces.fallback.php Чтобы ссылаться на классы (а Exception это класс) - надо прописывать его полный путь либо в импортах use \Exception; в начале, либо внутри кода. Если ты это не сделаешь, то будет искаться по текущему неймспейсу \App\Foo\Exception; Для функций механизм другой. Сперва ищется в текущем неймспейсе, а потом в глобальном. Тк в задании создаешь свою функцию с таким же как с именем глобальной, то соответственно к ней нужно обратиться по полному пути (или опять же импортировать use function \json_decode; Нельзя импортировать функцию с таким же именем, поэтому обращаемся к ней со слешем.

0

Kirill Mokevnin

Угу, механизм неймспейсов общий абсолютно для всего. Обращение с ведущим слешом было в курсах и раньше и рассказывалось в основах. Это всего лишь полный путь до сущности (класс, функция и т.п.).

И насколько мне известно нельзя называть пользовательские функции так же, как стандартные.

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

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».

Похожие вопросы

Михаил Сидаченко 26 июня 2020 →

Добрый день. Нужно/Можно пользоваться в создаваемой функции jsondecode готовой функцией jsondecode из самог...

Светлана Ильина 20 апреля 2020 →

У меня этот код на ревью не проходит ``` function json_decode($json, $assoc = false) { // BEGIN (write ...

Дмитрий Безбородов 07 февраля 2020 →

В этом шаге Теории, насколько я понимаю, допущена ошибка. Мы в примере кода с исключением определяем функци...

Анатолий Москалев 17 декабря 2019 →

Добрый вечер)Подскажите пожалуйста,в чем я допустил ошибку? https://ru.hexlet.io/code_reviews/184334

Александр Новиков 28 ноября 2019 →

Добрый день, тоже стопорнул на данном задании, судя по количеству обсуждений, люди пропускают. либо сами бы...