巧用PHP中 get 魔術方法

2021-08-28 08:20:02 字數 1533 閱讀 8365

php中的魔術方法有很多,這些魔術方法可以讓php指令碼在某些特定的情況下自動呼叫。比如 __construct() 每次例項化乙個類都會先呼叫該方法進行初始化。這裡我們講一下__get() 魔術方法的使用。讀取不可訪問屬性的值時,__get() 會被呼叫。也就是,當想要獲取乙個類的私有屬性,或者獲取乙個類並為定義的屬性時。該魔術方法會被呼叫。

下面有段**:

class

model

else

return

$this->objdb;

}//自動載入redis

if(substr($name, 0,5) =='redis')

else

return

$this->objredis;

}//自動載入excel外掛程式

if(substr($name, 0,5) =='excel')

return

$this->objexcel;

}throw

new linkexception("變數不被支援,請預先model中定義",except_core);

}}?>

首先,該model類有只有乙個__get() 方法,沒有定義其他屬性,所有只要是訪問這個model類的屬性,都會來呼叫這個__get() 方法。而傳入的引數$name就是想要呼叫model類的屬性。

其次,__get() 方法裡有3個判斷,分別用於返回乙個libdatabase資料庫類和乙個libredis快取類和乙個libexcel 的excel外掛程式類的例項。

假設$mod 是model的乙個物件。我們來分析以下三中情況:

1、$mod->dbconfsys->getall($sql);

2、$mod->redisconfsys->get($key);

3、$mod->excel->export($data);

第乙個:訪問model類的dbconfsys屬性。但是model類中並沒有該屬性。所以 __get() 的第乙個判讀成立,那麼會返回libdatabase(『confsys』)的例項。這裡confsys其實是乙個資料庫的配置。如果有多個資料庫的配置比如confadmin、conftest等,都可以使用dbconfadmin和dbconftest來例項化該資料庫的乙個連線物件。當然連線的處理以及資料處理是在libdatabase裡實現的。最後呼叫該例項的getall方法執行sql語句。

第二個:訪問model類的redisconfsys屬性,同理,此時 __get() 的第二個判斷成立。返回的是libredis(『confsys』)的例項。這裡的confsys則是乙個redis的配置。像資料庫例項一樣,如果有多個配置,也是同樣的處理方式。最後呼叫該例項的get方法獲取某個鍵的值。

第三個:訪問model類的excel 屬性,此時__get() 的第三個判斷成立。返回的是libexcel()的例項。最後呼叫export方法匯出資料。

這個model類可以作為基礎的底層模型。然後系統中所有資料表的模型或者每個模組功能的模型都繼承model,同樣可以使用該model的功能,這裡需要注意的是每種物件的呼叫都需要先早model中做好判斷處理。

PHP 魔術方法 get

慢慢長尋夜,明月高空掛 get 讀取不可訪問屬性的值時,get set 在給不可訪問屬性賦值時,set 清晰的認識 get set class example 當給物件的乙個屬性賦值的時候如果該屬性不存在或者是非公有屬性則自動載入 set 方法 public function set name,va...

php魔術方法之 get 方法

get 方法的作用是獲取私有成員的屬性值,它含有乙個引數,即要獲取的成員屬性的名稱,呼叫時返回獲取的屬性值,這個方法不需要手動呼叫,是在獲取私有屬性時自動呼叫的,因為私有屬性已經被封裝,不能直接獲取屬性值,如 echo p1 name 的形式是錯誤的,但如果在類裡面加上了 get 的方法,在使用 e...

PHP魔術方法之 get 和

看 class stu public function set name,value s new stu var dump s a output 123 var dump s b output 123 var dump s c output null var dump s d output 0 va...