Intereting Posts
Проблема с веб-формой, используемой для добавления и удаления имен клиентов изменить фоновое изображение на другое, созданное динамически с помощью сценария вызова ajax php echo результат при повторении через цикл ссылка symfony, чтобы изменить язык и остаться на странице как расширить модуль авторизации пользователя kohana Пользовательский запрос $ wpdb в WordPress по настраиваемому полю PHP: объединить два массива, сохраняя ключи вместо переиндексации? Получить последний элемент массива без изменения массива в PHP? Как получить первое изображение из файла ramlbr rss в PHP Объединение трех трех таблиц как проверить, существует ли имя пользователя в кодеригенере Перенаправление с PHP после вызова ajax Yii Ошибка 400 Тонер CSRF не может быть проверен при попытке удалить сообщение Есть ли альтернатива PHP's strip_tags () Доступ к файлам сервера Wamp с помощью имени компьютера, установленного локального IP-адреса. Приложение Android

Динамический класс с именами с псевдонимом

ТАК,

У меня проблема с созданием динамических объектов с использованием пространств имен. Вот код пространства имен:

namespace Foo { class Bar { } } 

Теперь я пытаюсь создать объект класса Bar с:

 include('namespace.php'); $sName = 'Bar'; $sClass = '\\Foo\\'.$sName; $rObj = new $sClass; //correct object в include('namespace.php'); $sName = 'Bar'; $sClass = '\\Foo\\'.$sName; $rObj = new $sClass; //correct object 

и все хорошо. Но теперь я хочу использовать псевдоним и делать что-то вроде:

 include('namespace.php'); use Foo as Baz; $sName = 'Bar'; $sClass0= '\\Foo\\'.$sName; $sClass1= '\\Baz\\'.$sName; $rObj = new $sClass0; //correct object $rObj = new $sClass1; //Fatal error в include('namespace.php'); use Foo as Baz; $sName = 'Bar'; $sClass0= '\\Foo\\'.$sName; $sClass1= '\\Baz\\'.$sName; $rObj = new $sClass0; //correct object $rObj = new $sClass1; //Fatal error 

И я не могу создать экземпляр объекта таким образом (и доступ через полное имя все еще хорошо работает). Итак, мой вопрос: возможно ли получить доступ к классу через псевдоним, и, если да, то как? Я также пытался получить доступ при использовании $sClass1='Baz\\'.$sName – нет успеха. Кроме того, я проверил объявленные классы с помощью функции get_declared_classes() , он показывает, что у меня есть только класс \Foo\Bar (ссылка на псевдоним не указана).

Я не уверен, если это имеет значение, но я использую версию PHP 5.5.

Только парсер использует ваши псевдонимы пространства имен для канонизации ссылок на классы внутри каждого из ваших файлов.

Другими словами, он не вводит какой-либо глобальный псевдоним, который может использовать другой код. После того как ваш скрипт был проанализирован, псевдоним больше не используется.

Это поведение также описано в руководстве :

Импорт выполняется во время компиляции и поэтому не влияет на имена динамических классов, функций или констант.