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

案例总数51

访问总数312375

收藏总数310906

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

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


9.  final

final,最终的。

这个关键字在php中,可以修饰类和方法名。 但是不能修饰属性。

修饰类的话,  此类不能被继承。

修饰方法的话,此方法可以被继承,但是子类中不能覆盖重写父类的该方法。


10. 访问控制修饰符:


1. 作用:来说明属性、方法的权限特点,只能写在属性和方法前面。


2. 三类: private 私有的  、protected 受保护的  、public 公共的


3. 访问位置:


private的属性,只能在类定义的花括号{}内才能访问。

public 的属性,在任意位置都可以访问。


4. 权限控制的bug


class Human(){

private $money = 1000;

public function getMoney($people){

return $people->money;

}

public function setMoney($people){

return $people-=500;

}

}

$zhangsan = new Human();

$lisi = new Human();

//echo $lisi->money; 是肯定不行的,因为它是私有的

//让李四去打探张三的钱

$lisi->getMoney($zhangsan);

//让张三去改变李四的钱

$lisi->setMoney($zhangsan);


1. 奇怪之处在于:

1. zhangsan的钱应该由zhangsan来调用getMoneysetMoney才能影响。

2.但是在符合调用原则的情况下:

$lisi有权利调用getMoney方法,而getMoney方法又来类的{}内,有权利读取私有属性money,如果调用私有属性的话需要$this或者该类的对象,这个时候我们已经对$zhangsan=new Human();进行了实例化,把$zhangsan当做参数传了进去, 也就顺利调用到了money全局属性。这样就实现了类外调用类内的私有属性。


2. 李四读取和改变张三的钱,这如果从生活的角度来看是不合理的。因为钱私有,是指 每个对象的钱针对每个对象私有:

即:张三的钱,由张三->shouwMoney才能引用。李四不应该有权引用或者说李四想引用也只能是引用自己的money才对。但是上面的代码李四却引用和改变了张三的钱。这是为什么呢?


答案:PHP在实现上,并不是以对象为单位来控制权限的。而是以类为单位来控制权 限的。权限的界限是类{}内和类外。


注意;所以说只要执行的过程环境只要在类内,我们就有办法取得类私有属性或方法  的使用权。但是为什么PHP的权限控制不设为对象呢,以为类只设定一次,这 样简化了程序的定义过程,但我们无法去预测对象会有多少。


3. 但是无论怎么样,张三可以操作李四的钱终究不合理。其实我们这样的用法本身就不 具有现实的意义,我们应该尽量的来调用对象的方法,而不应该直接把对象当成参数 传到另一个对象的方法中使用。就像,小偷是可以去伸到别人的口袋里去偷钱的,即 使钱是我们自己私有的,但是并不是说可以就是对的。


 

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