開源外貿電商系統opencart中controller.php中的__get方法

2019-10-23 21:51:12 7

在PHP中存在一些特殊的方法,例如: __set()、__get()、__isset() 與 __unset()。

__set() 方法用于設置私有屬性值。 

__get() 方法用于獲取私有屬性值。 

__isset() 方法用于檢測私有屬性值是否被設定。

__unset() 方法用于刪除私有屬性。

實際應用中,經常會把類的屬性設置為私有(private),那么需要對屬性進行訪問時,就會變得麻煩。雖然可以將對屬性的訪問寫成一個方法來實現,但 PHP 提供了一些特殊方法來方便此類操作。

__set() 

__set() 方法用于設置私有屬性值:

function __set($property_name, $value)
{ 
    $this->$property_name = $value; 
}

在類里面使用了 __set() 方法后,當使用 $p1->name = "張三"; 這樣的方式去設置對象私有屬性的值時,就會自動調用 __set() 方法來設置私有屬性的值。

__get() 

__get() 方法用于獲取私有屬性值:

function __set($property_name, $value)
{ 
    return isset($this->$property_name) ? $this->$property_name : null;
}

例子:

<?php
class Person {
    private $name;
    private $sex;
    private $age;

    //__set()方法用來設置私有屬性
    function __set($property_name, $value) { 
        echo "在直接設置私有屬性值的時候,自動調用了這個 __set() 方法為私有屬性賦值<br />";
        $this->$property_name = $value; 
    }
    //__get()方法用來獲取私有屬性
    function __get($property_name) {  
        echo "在直接獲取私有屬性值的時候,自動調用了這個 __get() 方法<br />";
        return isset($this->$property_name) ? $this->$property_name : null;
    }
}

$p1=new Person();
//直接為私有屬性賦值的操作, 會自動調用 __set() 方法進行賦值
$p1->name = "張三";
//直接獲取私有屬性的值, 會自動調用 __get() 方法,返回成員屬性的值
echo "我的名字叫:".$p1->name;	
?>

運行該例子,輸出:

在直接設置私有屬性值的時候,自動調用了這個 __set() 方法為私有屬性賦值 

在直接獲取私有屬性值的時候,自動調用了這個 __get() 方法 

我的名字叫:張三

__isset()

__isset() 方法用于檢測私有屬性值是否被設定。

如果對象里面成員是公有的,可以直接使用 isset() 函數。如果是私有的成員屬性,那就需要在類里面加上一個 __isset() 方法:

private function __isset($property_name)
{
    return isset($this->$property_name);
}

這樣當在類外部使用 isset() 函數來測定對象里面的私有成員是否被設定時,就會自動調用 __isset() 方法來檢測。

__unset()

__unset() 方法用于刪除私有屬性。

同 isset() 函數一樣,unset() 函數只能刪除對象的公有成員屬性,當要刪除對象內部的私有成員屬性時,需要使用__unset() 方法:

private function __unset($property_name)
{
    unset($this->$property_name);
}


捉鸡麻将单机版下载