<?php
class A
{
function __construct()
{
echo get_class($this->getInstance()), PHP_EOL,
get_class(static::getInstance()), PHP_EOL,
get_class(self::getInstance()), PHP_EOL;
}
public static function getInstance()
{
static $getInstance;
if (null == $getInstance) $getInstance = self::makeInstance();
return $getInstance;
}
public static function makeInstance()
{
return new stdClass();
}
}
$a = new A();
class B extends A
{
function __construct()
{
echo get_class($this->getInstance()), PHP_EOL,
get_class(static::getInstance()), PHP_EOL,
get_class(self::getInstance()), PHP_EOL;
}
public static function makeInstance()
{
return new ArrayObject();
}
public function __destruct()
{
die();
}
}
$a = new B();