- var_dump: documentation ( source)
- class_alias: documentation ( source)
- rand: documentation ( source)
<?php
class Animal {
public function eat() { echo 'Yummy!'; }
}
class Plant {
public $size = 0;
public function grow() { echo 'I\'m level '.++$this->size; }
}
if (rand(0, 1) == 0) $base = 'Animal'; else $base = 'Plant';
class_alias($base, "LifeformBase");
class Lifeform extends LifeformBase { }
var_dump(new Lifeform);
// similar for ReflectionClass, you just need to fetch the name
// inheritance by anonymous class; also requires an object representing the anonymous class, like Closure is for anonymous functions.
function get_base_animal_class() {
return new class extends Animal {
public $color;
public function hiss() { echo 'Hiss!'; }
};
}
class_alias(get_class(get_base_animal_class()), "AnonBase");
$tiger_class = new class extends AnonBase {
public $color = 'orange';
};
var_dump($tiger_class->hiss(), $tiger_class->color);