类 讲继承,撇不开类,类一直是OOP中一非常重要的概念,在这个过度OOP的时代中,什么都得抽象成类,好像不抽象类就不会写代码了。所谓类,即一系列对象的总和,这系列对象有一样的属性和一样的方法。所谓方法,就是对象可以操作的行为:如可以吃、可以睡、可
讲继承,撇不开类,类一直是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(); ?>
这里表达的是一个简单的动物类,它有属性“体重”,有方法“吃”,“睡”。这些属性和方法,是类内部可见,还是类内部也可见。就有 是外表上显而易见的,如手、脚、嘴、吃东西等,这些就是所谓public
和private
关键字。public
的;还有些外表上看不出来的,如心、肝、脾、心跳、消化等,这些就是所谓private
和protected
。至于,private
和protected
啥不一样,后面会讲。(modified 2014-5-1)
我们可以按以下操作来实例化一个对象
<?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在内的许多语言,都选择关键字extends
就是想很清楚地表达了这个概念它。派生关系可以用家族树来表达,确实就像继承。(modified 2014-5-1)
<?php class People extends Animal { // 类也是动物 protected $IQ = 0; public function think() {echo "it's thinking!";} } ?>
以上表达的就是人是继承了动物的方法“吃”,“睡”。但人不只“吃睡”,还会“思考”,所以还有智商“IQ”。那有些属性、方法不想被类外部访问,又想被继承它的类访问怎么办,好吧,再搞个 好吧,既然是继承,那我们来研究一下达尔文的进化和退化论。派生类于基类,多了新的属性或新的方法,即是进步;少了在基类中声明为protected
关键字好了。private
的属性和方法,即为退化。(modified 2014-5-1)
好吧,继承并不复杂,以上的public, protected等,我随便写的,没逻辑的。
这节比较抽象,我们来讲故事吧!(modified 2014-5-1)
上帝在造万物时,想造生物,生物有生命会呼吸,然后好抽象,不懂造。(抽象基类,有抽象方法呼吸)
然后,上帝说,我们来造鸟,鸟是生物,有两只脚,有翅膀,会飞,用肺呼吸,羽毛什么颜色?长什么样子?好抽象,不会造。(派生抽象类)
上帝说,好吧,我们来造燕子,燕子是鸟,黑色毛,尾毛像剪刀。然后,捏完上色,好具体。(类)
然后,上帝用抽象到具体的方法,创造世界上最大的操作系统,Hello World!
<?php abstract class Life { abstract function breathing(); } abstract class Bird extends Life { $foots = array(); $wings = array(); function breathing() { echo "with lump!"; } abstract function feather(); function fly() { echo "flying!"; } } class Swallow Extends Bird () { $foots = array(); $wings = array(); function breathing() { echo "with lump!"; } abstract function feather() { echo "black and like a cicor!"} function fly() { echo "flying!"; } } ?>
从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; // 外部调用静态属性/方法 ?>
由于明天还有重要的事,今天只讲到这里,这里只是热身,精彩的内容在后面。
( 完 )
版权所有:老白经 转载请保留来源信息。 >