public static function test() { var_dump(is_callable('B1::f')); B1::f(); }
class B1 extends A1 { public function doTest(A1 $obj) { echo __METHOD__ . "\n"; $obj->test(); } } class C1 extends A1 { protected function test() { echo __METHOD__ . "\n"; } } $b = new B1(); $b->doTest(new C1()); class A2 { protected static function test() { echo __METHOD__ . "\n"; } } class B2 extends A2 { public static function doTest(A2 $obj) { echo __METHOD__ . "\n"; $obj->test(); }
function zz($id) { parent::__construct($id); }
static::$instance = $container; } //这样做,启动单例的作用 public static function getInstance() { return static::$instance; } } class A1 extends B1 { public function __construct() { //$this->setInstance($this); static::setInstance($this); } public function hello() { echo "A1 hello Method" . PHP_EOL; } } class A2 extends B1 { public function world() { echo 'A2 world Method' . PHP_EOL; } } $a1Obj = new A1(); B1::getInstance()->hello(); //输出 A1 hello Method A2::getInstance()->hello();
public static function test() { echo B1::f(); }
<?php class A1 { public static function getInstance() { return new self(); } } class B1 extends A1 { } $obj = B1::getInstance(); var_dump($obj); //object(A1)#1 (0) { } class A { public static function getInstance() { return new static(); } } class B extends A { } $obj = B::getInstance(); var_dump($obj); //object(B)#2 (0) { }