Heim  >  Artikel  >  php教程  >  php 访问控制和重载

php 访问控制和重载

WBOY
WBOYOriginal
2016-06-06 19:47:31897Durchsuche

一 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方法来访问设置这些属性

如下

<?php class 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()访问不存在或者不可访问的属性时,自动调用。

<?php class 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虽然支持重载,但我们最好不要这么做。首先,破坏了访问封装,其次,动态的创建的属性和方法,只是为当前实例添加了这些属性方法,类的其他实例并没有这些属性和方法。

 

纯属个人见解,欢迎批评指正

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn