Некоторые стандартные классы и пространства имён PHP (на примере Yii 2)

Стандартная библиотека PHP содержит довольно много полезных классов, но их использование в «нестандартных» пространствах имён может иметь один характерный нюанс.

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

Приведём пример.

Допустим, у нас есть класс некий контроллер на Yii 2 и в нём есть действие, в котором выполняется проверка истечения срока выполнения некоторой задачи. Проверка выполняется при помощи стандартного класса DateTime.

На первый взгляд, код выглядит абсолютно правильным. Но, при вызове этого действия произойдёт ошибка, т. к. класс контроллера находится в особом пространстве имён app\controllers, а класса DateTime в этом пространстве имён нет.

Первое, что напрашивается сделать — указать пространство имён. Но, класс DateTime ни к какому пространству имён не отнесён. Он появился в версии 5.2, в то время как пространства имён впервые стали доступны в версии 5.3. Как быть?

На самом деле для подобных ситуаций в PHP предусмотрено простое и эффективное решение. Нужно добавить символ «\» перед именем такого класса и тогда PHP «поймёт», что речь идёт о классе, для которого пространство имён не определено и сможет правильно интерпретировать код.

Метод действия представленный ниже выполнится уже без ошибок.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *