Intereting Posts
Как взорвать строку списка параметров URL в парном => Array? Рефакторинг-контроллер для модели в кодовом зажигателе 'Нельзя использовать объект типа stdClass как массив', используя WordPress Как заставить строку заголовка пропустить в моем цикле while, используя fgetcsv? Предупреждение: stream_socket_enable_crypto (): этот поток не поддерживает SSL / crypto в C: \ xampp \ htdocs \ 12work \ class.smtp.php в строке 197 Настройка phpmailer на iis7 Можно ли использовать googles reCaptcha с formpree? Сайт Joomla на сервере LAMP за прокси-сервером не может получить доступ к потоку ресурсов HTTP Как проверить и увидеть расширение изображений с помощью PHP? Как вы запускаете .bat-файл из PHP? Сообщения, запланированные через Graph API, часто не публикуются Как я могу использовать XPath для выполнения поиска без учета регистра и поддержки неанглийских символов? проблемы с профилями страницы в системе, которые всегда отображают, что пользователь является владельцем профиля, который является неправильным предварительная установка встроенного видео в YouTube Цена форматирования как запятая

Создание экземпляров класса по строкам с использованием пространств имен PHP 5.3

Я не могу обойти проблему, создающую новый класс, используя строковую переменную и PHP 5.3. Пространства имен. Например, это работает;

$class = 'Reflection'; $object = new $class(); 

Однако это не так;

 $class = '\Application\Log\MyClass'; $object = new $class(); 

Произошла фатальная ошибка, указывающая, что класс не может быть найден. Однако он, очевидно, может быть создан при использовании FQN, т.е.

 $object = new \Application\Log\MyClass; 

Я нашел, что это aparrent на PHP 5.3.2-1, но не в более поздних версиях. Есть ли для этого работа?

     $class = 'Application\Log\MyClass'; $object = new $class(); 

    Начальный \ вводит (полностью квалифицированный) идентификатор с именами, но он не является частью самого имени класса.

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

     <?php // test.php namespace Acme\Bundle\MyBundle; class Test { public function __construct($arg1, $arg2) { var_dump( $arg1, $arg2 ); } } 

    А потом:

     <?php require_once('test.php'); (new ReflectionClass('Acme\Bundle\MyBundle\Test'))->newInstanceArgs(['one', 'two']); 

    Если вы не используете последнюю версию PHP, используйте следующий код, который заменяет последнюю строку вышеприведенного примера:

     $r = new ReflectionClass('Acme\Bundle\MyBundle\Test'); $r->newInstanceArgs(array('one', 'two')); 

    Код выдаст следующий результат:

     string(3) "one" string(3) "two"