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

Это работает:

$x = new classname();

Это не работает:

$class = "classname";
$x = new $class();

Я получаю сообщение об ошибке: «Имя класса класса не найдено». Версия PHP 5.4.22. Есть идеи? Насколько я исследовал эту тему, это именно то, что вам нужно сделать, чтобы создать экземпляр класса с помощью переменной.

Мой фактический тестовый код (копирование + вставка), $ build = 1:

//include the update file
$class="db_update_" . str_pad($build, 4, '0', STR_PAD_LEFT);
require_once(__ROOT__ . "/dbupdates/" . $class . ".php");

$x = new db_update_0001();
$xyz="db_update_0001";
$x = new $xyz();

Определение класса:

namespace dbupdates;

require_once("db_update.php");

class db_update_0001 extends db_update
{
...
}

Я только что узнал, что мой редактор добавил

use dbupdates\db_update_0001;

в файл. Это объясняет, почему «new db_update_0001 ();» работает. Чего я хочу достичь, так это того, что я динамически включаю обновления базы данных, которые хранятся в таких файлах, как dbupdates / db_update_0001.php

С Уважением,
Alex

0

Решение

Вы должны использовать полное имя класса. Который namespace\classname, Так что в вашем случае код должен быть:

$x = new db_update_0001();
$xyz="dbupdates\db_update_0001";
$x = new $xyz();

use Оператор бесполезен, если вы хотите создать экземпляр класса, используя переменную в качестве имени класса.

4

Другие решения

Попробуй это

<?php
$className = yourClassName();
$x = new $className;
?>
-1