<?php
abstract class Food
{
private $cups;
protected $apples;
protected $water;
function __construct(){
$this->cups = static::getCups();//static 也可以调用其他static修饰的函数
$this->apples = static::getApple();
$this->water = $this->getWater();
}
static function create(){
return new static();
}
static function getCups(){
return ‘debault‘;
}
static function getApple(){
return "apple";
}
protected function getWater(){
return "water";
}
}
class People extends Food
{
static function getCups(){
return "Please give me a big bottles";
}
static function getApple(){
return "Please give me a big apple";
}
}
echo "<pre>";
$app = People::create();
var_dump($app);
var_dump($app::getCups());
echo "</pre>";
?>
在>=PHP5.3中,给类加入了关键词static,用于实现延迟静态绑定(late static binding)。
在抽象类里面实例化了这个类,调用了父类的方法,然后父类里面是return new static()
重而创建了一个父类对象
执行结果
我的PHP版本 PHP Version 5.3.28
object(People)#1 (3) {
["cups":"Food":private]=>
string(28) "Please give me a big bottles"
["apples":protected]=>
string(26) "Please give me a big apple"
["water":protected]=>
string(5) "water"
}
string(28) "Please give me a big bottles"
原文:http://www.cnblogs.com/kissweb/p/3833730.html