什么是面向对象?面向对象的简单了解!返回列表
上传时间: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-fpm 基础介绍
- 下一篇:COOKIE、SESSION之彻底搞定!