開源外貿電商系統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);
}


北京时时彩pk10 黑龙江11选五走势图500 浙江十一选五的走势 河南麻将软件 什么网络游戏赚钱 精准马资料 360彩票新11选5走势图 华东15选5开奖走 王者捕鱼怎样才能赢钱 吉林十一选五直选 贵州快三开奖号码查询今天 单机打麻将 九游棋牌4期 云南快乐十分开奖规则 德州麻将红包群 今日股票大盘指数 江西11选5彩票通注册 黑龙江11选五走势图500 浙江十一选五的走势 河南麻将软件 什么网络游戏赚钱 精准马资料 360彩票新11选5走势图 华东15选5开奖走 王者捕鱼怎样才能赢钱 吉林十一选五直选 贵州快三开奖号码查询今天 单机打麻将 九游棋牌4期 云南快乐十分开奖规则 德州麻将红包群 今日股票大盘指数 江西11选5彩票通注册