什么是面向对象?面向对象的简单了解!返回列表
上传时间: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来调用getMoney和setMoney才能影响。
2.但是在符合调用原则的情况下:
$lisi有权利调用getMoney方法,而getMoney方法又来类的{}内,有权利读取私有属性money,如果调用私有属性的话需要$this或者该类的对象,这个时候我们已经对$zhangsan=new Human();进行了实例化,把$zhangsan当做参数传了进去, 也就顺利调用到了money全局属性。这样就实现了类外调用类内的私有属性。
2. 李四读取和改变张三的钱,这如果从生活的角度来看是不合理的。因为钱私有,是指 每个对象的钱针对每个对象私有:
即:张三的钱,由张三->shouwMoney才能引用。李四不应该有权引用或者说李四想引用也只能是引用自己的money才对。但是上面的代码李四却引用和改变了张三的钱。这是为什么呢?
答案:PHP在实现上,并不是以对象为单位来控制权限的。而是以类为单位来控制权 限的。权限的界限是类{}内和类外。
注意;所以说只要执行的过程环境只要在类内,我们就有办法取得类私有属性或方法 的使用权。但是为什么PHP的权限控制不设为对象呢,以为类只设定一次,这 样简化了程序的定义过程,但我们无法去预测对象会有多少。
3. 但是无论怎么样,张三可以操作李四的钱终究不合理。其实我们这样的用法本身就不 具有现实的意义,我们应该尽量的来调用对象的方法,而不应该直接把对象当成参数 传到另一个对象的方法中使用。就像,小偷是可以去伸到别人的口袋里去偷钱的,即 使钱是我们自己私有的,但是并不是说可以就是对的。
- 上一篇:php-fpm 基础介绍
- 下一篇:COOKIE、SESSION之彻底搞定!