2015-04-15 2 views
1

Я хочу, чтобы мои определенные константы находились внутри области моего плагина Wordpress, поскольку я чувствую, что плагин не должен заполнять глобальное пространство имен, если это необходимо.Сохранение констант внутри пространства имен

У меня есть структура, как:

namespace pluginname; 
namespace pluginname\setup; 
namespace pluginname\helpers; 

etc... 

Я пытался делать:

define('pluginname\var', 'foo'); 

, а затем в дочерних пространствах имен делают:

use pluginname; 

Но это не приносит постоянная в объем. Это правильный подход, но неправильный синтаксис или наоборот?

Следует ли вместо этого создать класс статического определения? Я исхожу из .NET background и немного запутался с реализацией пространства имен и областью видимости PHP.

Какой предпочтительный подход?

+0

Все в PHP очень хорошо документированы. Существует FAQ: http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse и http://php.net/manual/en/language.namespaces.faq .php # language.namespaces.faq.innamespace – Marc

+0

Цитирование из [Документов PHP] (http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.innamespace): 'Внутри строка с кавычками, обратная косая обратная последовательность намного безопаснее использовать, но по-прежнему рекомендуется избегать обратных косых черт во всех строках в качестве лучшей практики. ' –

+0

@Marc Я прочитал ее, но мне это непонятно. Использует ли константа из другого пространства имен, поддерживаемого только в 5.6? Должен ли я расширять класс с защищенными свойствами? – Guerrilla

ответ

0

Вы не можете использовать use для импорта констант в пространствах имен (FAQ).

Вот пример, чтобы понять, как вы могли бы сделать это:

namespace pluginname { // pluginname 
    define(__NAMESPACE__ . '\TEST', 'This my test constant.'.PHP_EOL); 
    echo TEST; 
} 

namespace pluginname\setup { // pluginname\setup 
    echo \pluginname\TEST; 
} 

namespace pluginname\helpers { // pluginname\helpers 
    echo \pluginname\TEST; 
} 

namespace { // global 
    echo pluginname\TEST; 
    echo TEST; 
} 

Это будет печатать:

This my test constant. 
This my test constant. 
This my test constant. 
This my test constant. 
TEST 
+0

ОК, я понимаю. Таким образом, нет возможности включить константу в область действия, которую вы всегда должны использовать полностью квалифицированное имя. Поэтому я предполагаю, что для длинных путей вы будете использовать 'pluginame \ a \ long \ obscure \ path as p', а затем' p \ foo', чтобы сохранить его каждый раз? Я просто привык к тому, чтобы иметь возможность доводить вещи до масштабов, так что это смутило меня, поскольку я решил, что будет такой путь. – Guerrilla

+0

Да, для импорта потребуется 5.6 'use const My \ Full \ CONSTANT;' http: //php.net/manual/en/language.namespaces.importing.php, но вы можете сделать это с помощью переменных, поэтому вам нужно использовать всего имени пространства имен только один раз – Marc

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