• 微信:
  • hai764003
  • QQ:
  • 511211014
  • E-mail:
  • jaquery@163.com

案例总数51

访问总数312376

收藏总数310907

什么是面向对象?面向对象的简单了解!返回列表

上传时间:2015-02-02 内容关键字:什么是面向对象?面向对象的简单了解!


二、面向对象:


面向对象的三大特征:封装、继承、多态。

1. 封装:


class Human(){

public $money = 1000;

}

$lisi = new Human();

echo $lisi->money;  //这个时候李四有1000块钱。


//我们变一下

$lisi->money=500;

echo $lisi->money;  //这个时候却变成了500块钱。


李四的钱,别人可以随便访问,也可以随便改变,在现实生活中是不合理的。所以有些东西是可以 让大家共用的比如名字,但是有些的东西必须保护起来自己用,比如钱。但是你不能让你的钱保护 起来别人就不能问或者用不了,但是可以经过你的同意后,经过处理再让外部调用。

class Human(){

private $money = 1000;

public function showMoney(){

return $this->money * 0.8;

}

}

$lisi =new Human;


总结封装概念:

对于一个对象,对于外界开放一个接口,调用接口时内部进行的操作不需要外界知道。隐藏了内部的一些实现细节,这就是对方法的封装。

比如:你看电视的时候,只需要按一下电视开关就可以实现看电视的动作,却不需要知道人家电视机内部是怎么工作的。


2. 继承:

概念:是指以一个类为父类,另一个类作为其子类,子类在继承父类的属性和方法的基础上,进一   步增添或修改

class Human{

private $wife = '小甜甜';

public function cry(){

echo '1111';

}

}

class Stu extends Human{

public function subtell(){

echo $this->wife;

}

}

$lisi = new stu();

$lisi->subtell();//出错如下:

Undefined property:Stu::$wife in D....

问:父类不是有wife属性吗,为什么没有继承过来?

答:私有的属性,可以理解为不能继承。(其实可以继承过来,只不过无法访问)



1. private :其实可以继承,只是无权修改。就像牌位,可以继承但不能动它。print_r($lisi); 打印 已经继承了含有私有属性父类的子类的时候,可以看出,私有属性已经被继承过来


第一:$lisi = new Stu() 创建一个STu对象,由于类Stu继承了Human,所以$lisi 这个对象里保存了两个$wife属性,一个来自父类Human,一个来自Stu


第二:$lisi->sshow()调用时,无论是sshow方法里的$this还是pshow方法里的$this 都指向的是$lisi这个对象。为什么呢?parent::pshow()就相当于$this->pshow()


第三: $lisi->sshow(),由于parent::pshow()的执行层面在Human中,所以这里wife指向的是“小甜甜”。sshow方法里的$this->wife执行层面是在Stu 这个指向的是Human层中的wife


问题1:如果只把Stu类中的wife=’凤姐’,什么效果?

答案1:因为sshow方法里的$this->wife;不可能去父类的层面找wife属性,所以 报属性未定的错误。



问题2: 如果只把Human类中的wife=’小甜甜’去掉,什么效果?

答案2: 如果把父类中的wife=“小甜甜”去掉以后,当parent::pshow()->然后 到父类中的pshow(){echo $this->wife}时,$this->wife时,没有属性wife了, 而且执行层面在父类,它没有权限调用在子类Human中的private属性的 $wife=”凤姐”。但是如果去掉Human类中的wife=’小甜甜’的同时把Stu中的 $wife=”凤姐”设置为public的话,就不会报错,而是打印出两个“凤姐”。


 

小海哥推荐你看: 博客园  php教程分享网站  phpmywind  脚本之家