Вместо того, чтобы вставлять это в копию, почему бы вам не поместить код методов __construct
и __toString
в определение вашего object
класса?
Что-то вроде этого должно сделать:
class object {
public function __construct($id = null) {
$this->name = get_class($this);
}
public function __toString() {
return($this->name);
}
protected $name;
}
final class bicycle extends object {
}
И, называя это:
$a = new bicycle();
var_dump($a);
Вы получаете:
object(bicycle)[1]
protected 'name' => string 'bicycle' (length=7)
Что означает экземпляр класса bicycle
с именем property
в правильном значении.
Нет необходимости копировать и вставлять любой код - кроме определения самого класса bicycle
.
В качестве идентификатора, если вы действительно хотите генерировать класс динамически, вы можете использовать что-то вроде этого:
$code = 'final class bicycle extends object {}';
eval($code);
Вам просто нужно создать переменную $code
динамически.
Но Я бы настоятельно рекомендовал против этого :
- у вас не будет помощника по коду в вашей IDE, так как он не может видеть класс
- у вас не будет phpdoc для вашего класса (по той же причине)
- всегда есть " eval is evil " - и это вполне верно, по крайней мере, в этой ситуации.
- использование "
new bicycle
" без объявления класса кажется неправильным!
- должно быть некоторое влияние на производительность с использованием
eval
Объявление нового класса не такая уж и большая боль, и я бы определенно предпочел копировать-вставить-изменить несколько строк, чем использовать что-нибудь подобное.