-
-
功能:在當前頁使用類別時自動載入該類別的檔案
- 參數$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 下一頁尾頁
|