Пространства имен

222
03 июля 2017, 19:58

Изучаю сейчас пространства имен, и я запутался немного...

Вот в фреймворке YII2, в контроллерах есть такой код:

1. namespace app\controllers;
2. use Yii;
3. use yii\web\Controller;

Есть вот два таких вопроса...

  1. Мы пишем "use Yii;", и вот на этот момент уже должен быть подключен файл с этим классом, или механизм пространства имен сам подключит его, когда увидит "use"?...

  2. "use Yii;" - вот здесь, мы получается "импортируем" класс Yii? Я правильно понимаю? И этот класс лежит сейчас в области видимости app\controllers? Ведь там не из глобальной области видимости пытается подключить.

Answer 1
  1. Нет. Конструкция use SomeNamespace\SomeClass всего лишь дает нам возможность использовать этот SomeClass не указавая каждый раз его пространство имен

Например у нас есть класс:

namespace aSpace;
class A{
    ....
}

Тогда в другом неймспейсе нам придется либо делать так:

namespace bSpace;
class B{
    public function b(){
        $a = new aSpace\A();
    }
}

Либо так:

namespace bSpace;
use aSpace\A;
class B{
    public function b(){
        $a = new A();
    }
}
  1. Класс импортируется/подгружается при выполнении инструкций include, include_once, require и require_once. Обычно подгрузку автоматизируют с помощью функции spl_autoload_register, но при этом внутри нее все равно те-же самые includ'ы и requir'ы
READ ALSO
PHP preg_match не видит то, что видит regex101

PHP preg_match не видит то, что видит regex101

Написал регулярку и проверил ее на regex101 - работает как надоНо при тестировании на php preg_match не работает

163
Работа с кэшем. Удалить данные из браузера

Работа с кэшем. Удалить данные из браузера

Аватар каждого пользователя имеет свой адрес: http://examplecom/avatars/[id_пользователя]

185
Оповещение новой строкив БД

Оповещение новой строкив БД

Здравствуйте, есть такой скрипт https://jsfiddlenet/tm0zr5q1/ и php:

185
Передача функции по параметру и возврат значения

Передача функции по параметру и возврат значения

Добрый деньЯ новичок в php и поэтому уже сломал голову в понимании того, почему этот код не работает как надо

168