說明:特定情況下,執行的方法
-
不可訪問的情況
- 根本不存在
- 許可權不夠
-
建構函式 __construct()
作用: 主要用於初始化,變數賦值 或 初始化的相關操作, 例項化物件的時候呼叫
細節:
- 當例項化子類時,子類沒有建構函式,會呼叫父類的建構函式
- 當子類想訪問父類可訪問方法時,使用parent::function()或者父類名::function()
-
解構函式 destruct()
作用:常用於釋放資源,物件銷燬時呼叫
細節:多少個物件,檔案執行完畢,就會呼叫多少次解構函式
-
物件銷燬:
- 顯示銷燬
- unset($obj)
- $obj = null
- $obj = 'abc'
- 系統銷燬
- 當程式執行完畢後,物件被系統銷燬
- 顯示銷燬
-
call() 當物件呼叫一個不可訪問的方法的時候,會被呼叫
-
callStatic() 當訪問不可訪問的靜態方法時,呼叫
-
get() 當訪問不可以訪問的屬性時,呼叫
-
set() 當設定不可訪問的屬性時候,呼叫
-
isset() 當對不可訪問的屬性進行了 isset() empty()操作時,呼叫
-
unset() 當對不可訪問的屬性進行了 unset()操作時,呼叫
-
sleep() 序列化的時候用,涉及到序列化
-
wakeup() 反序列化的時候用
-
toString() 當物件被當做字串輸出時,呼叫
-
clone 物件克隆前被呼叫,阻止克隆可以將clone()方法申明為private
<?php
class Student{
public $class;
//建構函式,用於初始化
public function __construct($class)
{
echo '呼叫__construct';echo "<br/>";
$this->class = $class;
}
//解構函式,用於釋放資源
public function __destruct()
{
echo '呼叫__destruct';echo "<br/>";
echo '程式執行結束呼叫';
}
//呼叫不可訪問方法時呼叫,使得程式更加健壯,不至於報錯
public function __call($name, $arguments)
{
echo '呼叫__call';echo "<br/>";
echo $name;echo "<br/>";
echo "<pre>";var_dump($arguments);echo "</pre>";echo "<br/>";
}
//呼叫不可訪問的靜態方法時呼叫
public static function __callStatic($name, $arguments)
{
echo '呼叫__callStatic';echo "<br/>";
echo $name;echo "<br/>";
echo "<pre>";var_dump($arguments);echo "</pre>";echo "<br/>";
}
//讀取不可訪問屬性呼叫
public function __get($name)
{
echo '呼叫__get';echo "<br/>";
echo $name;echo "<br/>";
}
//設定不可訪問屬性時呼叫
public function __set($name, $arguments)
{
echo '呼叫__set';echo "<br/>";
echo $name;echo "<br/>";
echo "<pre>";var_dump($arguments);echo "</pre>";echo "<br/>";
}
//對不可訪問屬性呼叫isset時呼叫
public function __isset($name)
{
echo '呼叫__isset';echo "<br/>";
echo $name;echo "<br/>";
}
//對不可訪問屬性呼叫unset時呼叫
public function __unset($name)
{
echo '呼叫__unset';echo "<br/>";
echo $name;echo "<br/>";
}
//對類物件執行serialize是呼叫
public function __sleep()
{
echo '呼叫__sleep';echo "<br/>";
return ['class'];
}
//對物件執行unserialize時呼叫
public function __wakeup()
{
echo '呼叫__wakeup';echo "<br/>";
}
//物件當字串輸出時呼叫
public function __toString()
{
echo '呼叫__stostring';echo "<br/>";
return 'Student';
}
//克隆物件的時候呼叫
public function __clone()
{
echo '呼叫__clone';echo "<br/>";
}
}
$stu1 = new Student('stu1');
$stu1->getName();//呼叫__call
Student::getName();//呼叫__callStatic
$stu1->height;//呼叫__get
$stu1->height = '175cm';//呼叫__set
isset($stu1->height); //呼叫__isset
empty($stu1->height); //呼叫__isset
unset($stu1->height); //呼叫__unset
$params = serialize($stu1); //呼叫__sleep
echo "<pre>";var_dump($params);echo "</pre>";echo "<br/>";
$obj = unserialize($params); //呼叫__wakeup
echo "<pre>";var_dump($obj);echo "</pre>";echo "<br/>";
$stu2 = clone $stu1; //呼叫__clone
echo $stu1;echo "<br/>";//呼叫__toString
複製程式碼,即可執行。 謝謝你的瀏覽,如有錯誤,歡迎指正哈!!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結