php 访问控制和重载

WBOY
リリース: 2016-06-06 19:47:31
オリジナル
897 人が閲覧しました

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

 

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート