<?PHP
ABSTRACT CLASS Base
{
protected static $stub = ['baz'];
//final public function boot()
static public function boot()
{
print __METHOD__.'-> '.get_called_class().PHP_EOL;
array_walk(static::$stub, function()
{
print __METHOD__.'-> '.get_called_class().PHP_EOL;
});
}
public function __construct()
{
self::boot();
print __METHOD__.'-> '.get_called_class().PHP_EOL;
array_walk(static::$stub, function()
{
print __METHOD__.'-> '.get_called_class().PHP_EOL;
});
}
}
CLASS Sub EXTENDS Base
{
}
// static boot
Base::boot(); print PHP_EOL;
// Base::boot -> Base
// Base::{closure} -> Base
Sub::boot(); print PHP_EOL;
// Base::boot -> Sub
// Base::{closure} -> Base
new sub;
// Base::boot -> Sub
// Base::{closure} -> Base
// Base->__construct -> Sub
// Base->{closure} -> Sub
// instance boot
new sub;
// Base->boot -> Sub
// Base->{closure} -> Sub
// Base->__construct -> Sub
// Base->{closure} -> Sub
Base::boot-> Base
{closure}-> Base
Base::boot-> Sub
{closure}-> Sub
Base::boot-> Sub
{closure}-> Sub
Base::__construct-> Sub
{closure}-> Sub
Base::boot-> Sub
{closure}-> Sub
Base::__construct-> Sub
{closure}-> Sub
Base::boot-> Base
Base::{closure}-> Base
Base::boot-> Sub
Base::{closure}-> Sub
Base::boot-> Sub
Base::{closure}-> Sub
Base::__construct-> Sub
Base::{closure}-> Sub
Base::boot-> Sub
Base::{closure}-> Sub
Base::__construct-> Sub
Base::{closure}-> Sub
Output for 5.4.0 - 5.4.29, 5.5.0 - 5.5.13
Base::boot-> Base
Base::{closure}-> Base
Base::boot-> Sub
Base::{closure}-> Base
Base::boot-> Sub
Base::{closure}-> Base
Base::__construct-> Sub
Base::{closure}-> Sub
Base::boot-> Sub
Base::{closure}-> Base
Base::__construct-> Sub
Base::{closure}-> Sub