外部調用類的私有屬性 先來瞭解一下PHP類中的 和 函數 當試圖獲取一個不可達屬性時,類會自動調用 函數。 當試圖設置一個不可達屬性時,類會自動調用 函數。 首先,來看一下 函數,先來獲取一個可達屬性試試: a; ? 看一下它的返回: 1 沒有問題,沒有調用 函數,現在我來訪問一個私有的不可達屬性: ...
外部調用類的私有屬性
先來瞭解一下PHP類中的__get
和__set
函數
當試圖獲取一個不可達屬性時,類會自動調用__get
函數。
當試圖設置一個不可達屬性時,類會自動調用__set
函數。
首先,來看一下__get
函數,先來獲取一個可達屬性試試:
<?php
class A{
public $a=1;
private $b=2;
function __get($name){
echo 'you can get '.$name;
}
}
$dy = new A();
echo $dy->a;
?>
看一下它的返回:
1
沒有問題,沒有調用__get
函數,現在我來訪問一個私有的不可達屬性:
<?php
class A{
public $a=1;
private $b=2;
function __get($name){
echo 'you can get '.$name;
}
}
$dy = new A();
echo $dy->b;
?>
會發現:
you can get b
說明這裡調用了__get
函數,我再來看一下__set
函數,同樣也是先使用可達的public
屬性:
<?php
class A{
public $a;
private $b;
function __set($name,$val){
echo 'you can get '.$name.$val;
}
}
$dy = new A();
$dy->a = 1;
echo $dy->a;
?>
看一下輸出:
1
使用成功,沒有問題,接著我們來使用私有屬性:
<?php
class A{
public $a;
private $b;
function __set($name,$val){
echo 'you can get '.$name.$val;
}
}
$dy = new A();
$dy->b = 1;
echo $dy->b;
?>
這時看到:
you can get b1
PHP Fatal error: Cannot access private property A::$b in /usercode/file.php on line 11
這裡調用了__set
函數並提示我們不能使用類的私有屬性。
現在來通過__set
函數實現外部使用私有屬性:
<?php
class A{
public $a;
private $b;
function __set($name,$val){
$this->$name=$val;
}
function B(){
echo $this->b;
}
}
$dy = new A();
$dy->b = 1;
$dy->B();
?>
看一下輸出:
1
說明使用成功。