功能:在當前頁使用類時自動載入該類的檔案
- 參數$className 為類的名稱 可自訂
*/
function __autoload($className){
$className=strtolower($className);//最好加上這一步,因為類首字母大寫,某些系統區分檔案名稱的大小寫
require("$className.class.php");//載入類檔案 One.class.php Two.class.php與本檔案在同一目錄下
echo '------------------------------ ';//作為調用時的標記來測試
}
//以下兩個類均未在本檔案中定義
$o=new One();//使用One類,對其初始化
$t=new Two();//使用Two類,對其初始化
?>
複製代碼注意這個函數如果需要正常載入,需要將檔案名稱設定成類名(推薦小寫).class.php等類名和檔案名稱有某種關聯才可以,另外如果這個函數出現異常不能被Catch捕獲,將會顯示Fatal Error 2.__construct() 建構函式 在C#和PHP4中建構函式的函數名都是與類名相同,當然PHP5也支援這樣(如果找不到__construct方法後會找函數名與類名相同的作為建構函式),之所以這樣寫的好處是如果我們想更改類的名字,我們就只改類名就可以,不用在更改建構函式的函數名,同時從某種程度上減少了我們出錯的機率,範例程式碼還是簡單寫一下吧!
class PcYoYo{
private $url;
function __construct($url){
$this->url=$url;
}
}
?>
複製代碼3.__destruct() 解構函式 __destruct 析構方法,PHP將在對象被銷毀前(即從記憶體中清除前)調用這個方法 預設情況下,PHP僅僅釋放對象屬性所佔用的記憶體並銷毀對象相關的資源. 解構函式允許你在使用一個對象之後執行任意代碼來清除記憶體. 當PHP決定你的指令碼不再與對象相關時,解構函式將被調用. 在一個函數的命名空間內,這會發生在函數return的時候. 對於全域變數,這發生於指令碼結束的時候.如果你想明確地銷毀一個對象,你可以給指向該對象的變數分配任何其它值.通常將變數賦值勤為NULL或者調用unset. 4.__call() 當所調用的成員方法不存在(或者沒有許可權)該類時調用,用於對錯誤後做一些操作或者提示資訊
//初始化一個類
class Person{
private $name;
private $age;
private $sex;
function walk($hour,$minute){
echo "$hour :$minute We will walk ";
}
function run(){
}
//使用魔術方法__call
/*****
功能:在對象調用類中不存在的函數時自動調用,進行一些操作
參數:$proName 所調用函數名稱 $args 參數數組 $proName ,$args 為自訂的形參可符合自己風格變動,但是這兩個參數的意義是固定的
*****/
function __call($proName,$args){
echo "The $proName doesn't exist! the parameters are";
print_r($args);
echo ' ';
}
}// the end of class
//執行個體化一個對象
$p=new Person();
//調用Person類中存在的方法
$p->walk(5,39);
//調用Person類中不存在的方法
$p->work();//如果沒有使用魔術方法__call,則程式發生錯誤,錯誤資訊Fatal error: Call to undefined method Person::work() in D:/phpnow/htdocs/holiday/magic__call.php on line 29
//如果使用了魔術方法__call,則在對象調用類中不存在的函數時,__call被自動調用,用來執行某些操作。
?>
複製代碼5.__clone() 該函數在對象複製時自動調用,其作用是對複製的副本做一些初始化操作
//初始化一個類
class Computer{
//
public $cpu='intel';
private $monitor;
private $keyboard;
//設定魔術方法__clone()函數
function __clone(){//如果不設定這個魔術方法那麼複製出來的就是一模一樣的,__clone函數和類的建構函式類似都是做一些初始化操作
$this->cpu='AMD';//$this指的是新建立的複製對象
}
//設定解構函式,用來比較=和clone的區別
function __destruct(){
echo '************************************* ';
}
}// the end of the class
//執行個體化一個對象
$c1=new Computer();
//使用引用的方法在添加一個引用,因為對象的引用是存放在記憶體中的棧記憶體中,如果按指標的說法,那麼這樣做就是在記憶體中有建立了一個指標指向$c1指向的對象
//我們可以通過條用解構函式判斷出來這樣不是複製了對象
$c2=$c1;
//使用clone方法複製一個對象
$c3=clone $c1;
//輸出兩者的資訊比較
echo $c1->cpu,' ';
echo $c3->cpu,' ';
?>
複製代碼6.__get() 當所對象所調用的成員屬性未聲明或者層級為private或者protected等時,我們可以在這個函數裡進行自己的一些操作
class Person{
private $name;
public $nation;
function __get($para){//必須有一個參數
echo $para.'不存在';
}
}
$p=new Person();
$name=$p->name;//call the __get function
$nation=$p->nation;//never call the __get function
?>
複製代碼7.__set() 當所對未聲明或者層級為private或者protected等進行賦值時調用此函數,我們可以在這個函數裡進行自己的一些操作
class Pc{
private $key;
function __set($key,$value){//必須有兩個參數一個是成員屬性,另一個是值
echo '對'.$key.'賦值為'.$value.'失敗';
}
}
$p=new Pc();
$p->key=123;
?>
複製代碼 1 2 下一頁 尾頁 |