2014-10-04 2 views
0

я просто играл с моей IDE, и я заметил, что когда я использую «Fix код» вариант на класс добавляет кучу строк в верхней части следующего типаИспользование «использовать»

use Someclass; 
use \Ano\therClass; 
use Iface; 
... 

Мне было интересно, какая именно цель этого, так как классы будут загружаться по требованию, нужно ли явно объявлять, какие классы будут использоваться?

+1

Применение заявление со всем пространством имен в верхней части позволяет использовать класс в коде без имен (то есть: новый therClass). Также хорошо, чтобы они были перечислены в начале, поэтому вы можете легко увидеть, какие зависимости имеет файл/класс. – JimL

+0

@JimL Похоже, что он собирается потреблять некоторые ресурсы, это так? –

+1

Весь код потребляет ресурсы, этот материал для поиска пространства имен не является чем-то, что потребует значительного объема ресурсов. Неправильное место, чтобы тратить время на повышение производительности :) – JimL

ответ

0

Когда U создать класс, название это пакет с ключевым словом namespace

<?php 
/** 
* CacheException.php 
*/ 
namespace Doctrine\ORM\Cache; 

class CacheException extends Exception {} 

В других use можно импортировать только один класс из пакета:

use Doctrine\ORM\Cache\CacheException; 

throw new CacheException('Failed to cache'); 

Также use импортирует полный пакет со всеми его классами:

use Doctrine\ORM\Cache; 

throw new CacheException('Failed to cache'); 

Больше на http://php.net/manual/en/language.namespaces.importing.php

+0

Но какой смысл импортировать пакеты, когда я могу просто использовать полное пространство имен, приведенное в вашем примере - 'throw new Doctrine \ ORM \ Cache \ CacheException ('Failed to cache');' –

+0

Мой совет не использовать FQCN - лучше импортировать один раз и использовать короткие имена. И код короче и читабельнее. –

1

Используя use, вы можете иметь разные объекты, функции и т. Д. С тем же именем, благодаря пространствам имен. Когда вы пишете use в своем коде, вы указываете PHP на импорт элементов пространства имен и присвоение ему псевдонима.

Подробнее: http://php.net/manual/en/language.namespaces.importing.php

+0

Да, я знаю, но если я не наглажу их, просто не имеет смысла делать эти заявления или делать это? –

+0

Если вы не планируете использовать разные пространства имен в своем проекте, то эти объявления не нужны, но ваша IDE, вероятно, использует его, чтобы избежать конфликтов имен при разработке крупномасштабных проектов. – edgeofmystery

+0

Это именно то, что меня смущает. Похоже, мне больше не будет конфликта имен, если вы используете полное пространство имен для данного класса, а не используете псевдонимы и прочее. –

Смежные вопросы