Home >php教程 >php手册 >PHP中类的继承关系[热身]

PHP中类的继承关系[热身]

WBOY
WBOYOriginal
2016-06-06 20:12:13971browse

类 讲继承,撇不开类,类一直是OOP中一非常重要的概念,在这个过度OOP的时代中,什么都得抽象成类,好像不抽象类就不会写代码了。所谓类,即一系列对象的总和,这系列对象有一样的属性和一样的方法。所谓方法,就是对象可以操作的行为:如可以吃、可以睡、可

PHP

讲继承,撇不开类,类一直是OOP中一非常重要的概念,在这个过度OOP的时代中,什么都得抽象成类,好像不抽象类就不会写代码了。所谓类,即一系列对象的总和,这系列对象有一样的属性和一样的方法。所谓方法,就是对象可以操作的行为:如可以吃、可以睡、可以计算等等。

<?php class Animal { 
    public $weight = 0;
    public function eat() { echo "it's eating!"; }
    private function sleep(){ echo "it's sleeping!"; }
}
$a = new Animal; // 或 new Animal();
$a->weight = 20;
$a->eat();
?>

这里表达的是一个简单的动物类,它有属性“体重”,有方法“吃”,“睡”。这些属性和方法,是类内部可见,还是类内部也可见。就有publicprivate关键字。

构造函数

我们可以按以下操作来实例化一个对象

<?php $a = new Animal; // 或 new Animal();
$a->weight = 20;
?>

但如果weight只可以内部访问或者想简化操作呢?那牛人又设计了构造函数__construct,这是一个特殊名字的方法。

<?php class Animal { 
    private $weight = 0;
    public function($weight) {
        $this->weight = $weight;
    }
    public function eat() { echo "it's eating!"; }
    private function sleep(){ echo "it's sleeping!"; }
}
$a = new Animal(20);
?>

继承

有了类以后,在类与类之间找关系,继承就是一个明显的关系。所谓继承,不是简单的生物学中的基因继承,也不是经济学中的财产继承。它只是表达了一个概念,你有的我也有,你没有的我也有。

<?php class People extends Animal { // 类也是动物
    protected $IQ = 0;
    public function think() {echo "it's thinking!";}
}
?>

以上表达的就是人是继承了动物的方法“吃”,“睡”。但人不只“吃睡”,还会“思考”,所以还有智商“IQ”。那有些属性、方法不想被类外部访问,又想被继承它的类访问怎么办,好吧,再搞个protected关键字好了。
好吧,继承并不复杂,以上的public, protected等,我随便写的,没逻辑的。

抽象类

我们知道,动物这词是抽象出来的,飞禽走兽和人都是动物。就比如吃这件事情,来说,我问你动物吃什么,你说要看具体什么动物了。关键词是abstract。类前用abstract是说,这个类有些方法我不知道怎么表达,方法前用abstract是说这个方法我不知道怎么表达。OK,继承你的类也可以不知道怎么表达,但总之在类被实例化成对象的时候,你一定要知道表达。否则,计算机会说:“你耍我啊!”,然后报错。

<?php abstract class Animal {
    $weight = 0;
    abstract function eat();
    function sleep(){ echo "it's sleeping!"; }
}
abstract class Bird extends Animal {} // 鸟吃什么也不清楚
class Hen Extends Bird () { // 母鸡吃人给的饭
    function eat() {echo "it's eating rice!"}
}
?>

静态方法、属性

从C/C++时代就想怎么去解释去解释这个静态两个字,这很计算机表达,因为他把变量和方法存在程序的静态区,所以叫静态变量和静态方法。我一直在想这东西在类中表达怎么跟现实中结合,让我们更好地去理解它然后更好地使用它。
OK。想想,有一个People类,关于人类有什么属性和什么操作跟一个人的生命没关系的?人类有多少人,生成身份ID。

<?php class People extends Animal {
    function eat() {echo "we'are eating tasty food!"}
    function __construct() {
        $this->ID = self::create_id(); // 内部调用静态属性/方法
    }
    static $populace; // 静态属性,人口
    static function() create_id { return microtime(); } // 静态方法,生成身份证
}
echo "Populace: " . People::$populace; // 外部调用静态属性/方法
?>

To be continue

由于明天还有重要的事,今天只讲到这里,这里只是热身,精彩的内容在后面。

( 完 )

版权所有:老白经 转载请保留来源信息。 >

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn