首页 > 代码库 > php 访问控制和重载
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->get();$m->set();var_dump($m);?>
我们可以通过公共的方法访问,设置private属性的值。
二 上面定义的公共方法调用时,必须显式的调用,给出方法名。但是对于可直接访问的属性,我们不需要使用这些方法,直接$m->属性即可。
这里面就存在不同访问控制的属性使用不同的方法 来访问/设置。那么有没有统一的操作接口,使得 我们无论访问类中的public/private/protected属性,都是一致的方法呢?
__set()/__get()方法提供了这种方便
__set()设置不存在的或者不可访问的属性时,自动调用。
__get()访问不存在或者不可访问的属性时,自动调用。
<?phpclass test{ private $a = 1; public function __get($a){ if(isset($this->$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虽然支持重载,但我们最好不要这么做。首先,破坏了访问封装,其次,动态的创建的属性和方法,只是为当前实例添加了这些属性方法,类的其他实例并没有这些属性和方法。
纯属个人见解,欢迎批评指正
php 访问控制和重载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。