Конструктор — Можно ли создать экземпляр PHP с использованием свойства имени класса из метода класса (в одной строке кода)?

Я хотел бы иметь возможность создания экземпляра класса, используя имя класса, хранящееся в свойстве другого класса, и я хочу сделать это с одной строкой кода, как в комментариях в коде ниже (и он должен работать по крайней мере на одном недавнем версия PHP 5). Это возможно?

<?php

class Foo {

public function doFoo() {

echo "foo\n";

}

}

class Bar {

function __construct($className) {

$this->className = $className;

}

public function doBar() {

//INSTEAD OF THESE TWO LINES...
//$className = $this->className;
//$instance = new $className();

//I WOULD LIKE THIS (OR SOME OTHER) ONE-LINER TO WORK:
$instance = $this->className();

$instance->doFoo();

}

}

$bar = new Bar('Foo');
$bar->doBar();

ОЖИДАЕМЫЙ ВЫХОД:

foo

0

Решение

В коде есть очевидная опечатка, которая вызывает конструктор вместо функции и может быть исправлена ​​следующим образом:

$instance = new $this->className();

Это делает трюк.

0

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

Других решений пока нет …