Intereting Posts
Логический оператор AND с регулярным выражением php вычесть нерабочие часы и дни с двух заданных времен в php Электронная почта PDF-приложение с PHP с использованием FPDF Настройка и проверка Cookie с PHP, не работающим в Safari PHP – Извлечение свойства из массива объектов Каков наилучший способ вставить несколько строк в базу данных mysql с помощью php? Начало работы с PHP Extension-Development Войдите в cpanel из php-скрипта, не передавая учетные данные обратно в браузер. Как вставить данные в базу данных mysql из таблицы HTML Дружественные URL-адреса – переписывание мод и переадресация php PHP, отображающий html-адрес электронной почты на странице html создать файл в другом каталоге с php Обновление и удаление уникальных отношений соединения в CakePHP Как использовать маршрутизацию laravel и angularjs вместе? как отправить 3 формы с помощью одной кнопки отправки с помощью AJAX

Как «вызвать» экземпляр класса в PHP?

есть ли возможность «вызвать» экземпляр класса строковым представлением?

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

class MyClass { public $attribute; } $obj = getInstanceOf( "MyClass"); //$obj is now an instance of MyClass $obj->attribute = "Hello World"; 

Я думаю, что это должно быть возможно, так как SoapClient от PHP принимает список classMappings, который используется для сопоставления элемента WSDL с классом PHP. Но как SoapClient «вызывает» экземпляры класса?

Solutions Collecting From Web of "Как «вызвать» экземпляр класса в PHP?"

 $class = 'MyClass'; $instance = new $class; 

Однако, если конструктор класса принимает переменное количество аргументов, и вы держите эти аргументы в массиве (вроде call_user_func_array ), вы должны использовать отражение:

 $class = new ReflectionClass('MyClass'); $args = array('foo', 'bar'); $instance = $class->newInstanceArgs($args); 

Существует также ReflectionClass::newInstance , но он делает то же самое, что и первый вариант выше.

Справка:

  • Создание объекта
  • ReflectionClass :: newInstanceArgs ()
  • ReflectionClass :: newInstance ()

Если количество аргументов, необходимых конструктору, известно и постоянно, вы можете (как предложили другие) сделать это:

 $className = 'MyClass'; $obj = new $className($arg1, $arg2, etc.); $obj->attribute = "Hello World"; 

В качестве альтернативы вы можете использовать Reflection. Это также означает, что вы можете предоставить массив аргументов конструктора, если вы не знаете, сколько вам понадобится.

 <?php $rf = new ReflectionClass('MyClass'); $obj = $rf->newInstanceArgs($arrayOfArguments); $obj->attribute = "Hello World"; 

Другие ответы будут работать в PHP <= 5.5, но эта задача становится намного проще в PHP 5.6, где вам даже не нужно использовать отражение. Просто делать:

 <?php class MyClass { public function __construct($var1, $var2) {} } $class = "MyClass"; $args = ['someValue', 'someOtherValue']; // Here's the magic $instance = new $class(...$args);