首页 > 代码库 > 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 访问控制和重载