php 访问控制和重载
一 php 类中定义的private/protected属性,类外部是无法访问的,但是 我们可以通过public方法来访问设置这些属性 如下 ?phpclass test{private $a = 1;public function get(){return $this-a;}public function set(){$this-a = 2;}}$m = new test();echo $m-
一 php 类中定义的private/protected属性,类外部是无法访问的,但是 我们可以通过public方法来访问设置这些属性
如下
a; } public function set(){ $this->a = 2; } } $m = new test(); echo $m->get(); $m->set(); var_dump($m); ?>
我们可以通过公共的方法访问,设置private属性的值。
二 上面定义的公共方法调用时,必须显式的调用,给出方法名。但是对于可直接访问的属性,我们不需要使用这些方法,直接$m->属性即可。
这里面就存在不同访问控制的属性使用不同的方法 来访问/设置。那么有没有统一的操作接口,使得 我们无论访问类中的public/private/protected属性,都是一致的方法呢?
__set()/__get()方法提供了这种方便
__set()设置不存在的或者不可访问的属性时,自动调用。
__get()访问不存在或者不可访问的属性时,自动调用。
$a)){ return $this->$a; }else{ return '不存在的属性'; } } public function __set($name,$value){ $this->$name = $value; } } $m = new test(); echo $m->b; $m->a=2; $m->b=10; var_dump($m); ?>
通过在类中实现__set()/__get(),实现了对属性访问的统一操作。
三 : php重载。php重载不同于 java重载,php重载 是指动态的创建类的属性 和方法。__get()/__set()方法就被归到了重载里。
个人觉得,php虽然支持重载,但我们最好不要这么做。首先,破坏了访问封装,其次,动态的创建的属性和方法,只是为当前实例添加了这些属性方法,类的其他实例并没有这些属性和方法。
纯属个人见解,欢迎批评指正
上一篇: Html/Css(新手入门第二篇)
下一篇: 正则
推荐阅读
-
PHP 根据IP地址控制访问的代码_PHP教程
-
PHP类成员的访问方式和权限_PHP教程
-
结合 PHP 使用 HTML 表单访问单个和多个表单值
-
php如何控制用户对图片的访问 PHP禁止图片盗链
-
PHP类成员的访问方式和权限
-
第六节--访问属性和方法 -- Classes and Objects in PHP5 [6_PHP
-
php使用Cookie控制访问授权的方法,phpcookie访问授权
-
探讨 PHP 访问控制器与运算符优先级_PHP教程
-
php的public、protected、private三种访问控制模式的区别,protectedprivate_PHP教程
-
PHP 根据IP地址控制访问的代码