Пространства имен — Где я должен использовать «использовать» в PHP?

Я понимаю что php use большую часть времени используется (без каламбура) для сокращения имен классов в пространстве имен для использования. У меня такой вопрос: у меня есть проект, который может использовать около 300-400 классов. Все эти классы имеют пространство имен и помещаются в их соответствующие каталоги, так что зарегистрированная автозагрузка может включать их, когда они действительно необходимы, тем самым предотвращая накладные расходы на загрузку группы файлов, когда они не являются необходимыми.

Теперь я хочу использовать use сократить некоторые имена классов, чтобы я мог писать код быстрее. Мой вопрос заключается в следующем:

Где я должен положить use сократить эти вещи?

  1. Должен ли я поместить их непосредственно в файл сценария, где определены классы, которые необходимо сократить?

  2. Могу ли я создать отдельный файл, в котором я определяю все свои use команды?

Я бы предпочел второй вариант, единственное, чего я не знаю, это то, что если я сделаю это так, не загрузит ли php все файлы, которые я предоставляю в качестве параметра для использования?

Например, если я делаю что-то вроде этого:

use My\Class\Path\Class as Class;
use My\Class\Path\Class2 as Class2;

будут два файла, где определение двух объектов Class а также Class2 будут включены сразу или только когда я потом в коде напишу что-то вроде new Class(),

0

Решение

Чтобы прояснить второй пункт, это содержимое одного файла. namespacetest.php:

 namespace x {
class a {}
}
namespace y {
use x\a;
class b extends a {}
}
namespace {//global namespace
use y\b as a;
new a();
}

Вы можете знать, пойти и поместить каждый блок пространства имен в отдельный файл, и он работает таким же образом.

И кое-что о include:

Допустим, у нас есть один файл inctest.php с <?php $var=123; ?> в этом.

Если мы включим это так:

function yxz(){
include 'inctest.php';
}

мы создаем локальную переменную в функции под названием $var,

Если мы делаем

function xyz(){}
include 'inctest.php';

мы создали глобальную переменную в php под названием $var,

На самом низком уровне include просто сливает php скрипты! Если сценарии определяют / объявляют классы / функции, они будут просто объявлены / определены. Но когда в сценарий включен глобальный код (не в функции или около того), то это зависит от места, в котором вы его включаете, от того, как будет работать включенный код / ​​сценарий. (см. примеры выше)

1

Другие решения

  1. Могу ли я создать отдельный файл, в котором я определяю все свои use команды?

Вы не можете иметь это это (документы):

Примечание: правила импорта для каждого файла зависят от того, включены ли файлы
НЕ наследовать правила импорта родительского файла.

что проясняет ваши сомнения 🙂

1

используйте этот способ (пример ниже 🙂 для более подробного посещения (http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.innamespace)

<?php
namespace foo;
use blah\blah as foo;

$a = new name(); // instantiates "foo\name" class
foo::name(); // calls static method "name" in class "blah\blah"?>
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector