一 __get和__set
1.當去使用不可訪問的屬性時,系統就會呼叫__get方法 不可訪問屬性:該屬性不存在 直接訪問protected或private屬性
2.當去給不可訪問屬性賦值時,會呼叫__set方法
<?php二,__isset和__unsetecho '';
class monkey
//魔術方法的名字是固定的
//$pro_name形參 表示屬性名
public function __get($pro_name)else
}//形式引數 屬性名$pro_name 屬性值$pro_val
public function __set($pro_name,$pro_val)else}}
$monkey1 = new monkey('悟空','桃子');
//觸發__get魔術方法
echo $monkey1->name;
echo $monkey1->food;
//觸發__set魔術方法
$monkey1->name = '孫悟空';
$monkey1->food = '香蕉';
echo $monkey1->name;
echo $monkey1->food;
1.當對不可訪問的屬性,進行了isset($物件名->屬性名),empty($物件名->屬性名),__isset函式就會被系統呼叫
2.當對不可訪問的屬性,進行了unset($物件名->屬性名),__unset函式就會被系統呼叫
<?php三.__tostringecho '';
class cat
public function __isset($pro_name)else
} public function __unset($pro_name)else
}}$cat1 = new cat('波斯貓','
//判斷name 屬性是否存在
if(isset($cat1->name))else
//判斷food 屬性是否存在
//此時food是私有屬性 因此會呼叫__isset方法
if(isset($cat1->food))else
//如果銷毀的成員屬性,是protected或者private的,就不能直接unset
//此時food是私有屬性 因此會呼叫__unset方法
unset($cat1->name);
var_dump($cat1);
echo '
-------------------';
unset($cat1->food);
var_dump($cat1);
當輸出乙個物件時,就會觸發該函式
1.__tostring沒有形參
2.__tostring要求返回乙個字串
3.當我們在專案開發時,需要找bug時,可以通過他輸出物件資訊
<?phpproperty_exists(物件名,屬性):echo '';
class cat
public function __tostring()
}$cat1 = new cat('波斯貓','
echo $cat1;
1.先判斷該物件是否有這個屬性,如果有則返回真
2.如果該物件沒有此屬性,則繼續判斷該物件對應的類是否定義過這個屬性,如果類定義過,就返回真
四,__clone
當將乙個物件完全的複製乙份,保證兩個物件的屬性和屬性值一樣,但他們的資料空間獨立,則可以使用物件轉殖
1.轉殖乙個物件時,轉殖方法裡面可以修改屬性的值
2.當不想被轉殖時,將轉殖方法private 例如:單例模式時
<?phpecho '';
class sheep
public function __clone()
}$sheep1 = new sheep('羊','草');
//轉殖乙個物件
五.__call
1.當呼叫了乙個不可訪問的成員方法(成員方法不存在,成員方法為protected或private)時,__call()方法就會被呼叫
<?php六,__autoload類的自動載入echo '';
class number
/* 兩個引數:方法名:$method_name 引數:$parameters是個陣列
在本例中的方法名是numand 引數是:10,20
*/ public function __call($method_name,$parameters)else }}
$num3 = new number();
echo $num3->numand(10,20);
1.當使用乙個未定義的類時,就會觸發__autoload這個函式
2.function __autoload($class_name){} 其中class_name是類名
例如:
但是,如果乙個php中引入多個類時,這樣做顯然就會麻煩了,不可能一直用require或include引入,所以可以將這些類用類名當鍵,檔名當值組成乙個陣列,放到乙個php檔案中,當用時將次php檔案引入即可;
例如:cat.class.php
<?phpdog class.phpclass cat
}
<?phpcommon.phpclass dog
}
<?php使用:$class_arr = array(
//類名為鍵 檔案路徑為值組成的陣列
'dog'=>'./dog.class.php',
'cat'=>'./cat.class.php'
);
<?phpecho '';
//引入放類陣列的php檔案
include './common.php';
function __autoload($class_name)
$dog = new dog();
$cat = new cat();
$dog->cry();
$cat->cry();
物件導向魔術方法
特別的方法 在特定的時機,完成自動呼叫的一些物件方法 construct 例項化過程中 初始化物件操作 destruct 物件被銷毀的過程中,釋放物件棧占用的額外資源 收尾性工作 clone 轉殖物件,重新初始化一下轉殖出來的新物件 tostring 物件轉換為字串 set get unset ca...
PHP物件導向自動載入類檔案
php實現類自動載入有兩種方法 一 autoload autoload是php中的魔術變數 在執行php指令碼中遇到呼叫不存在類時會自動呼叫該方法 例 這裡有兩個檔案 class demo1 class demo2 現在demo1.php 用到 demo2.php檔案 檔案 require once...
物件導向程式設計 類庫自動載入
目錄 1 php自動載入函式 autoload 2 更靈活的自動載入 使用者自定義載入函式 在例項化物件時,呼叫 autoload 方法,自動找到類檔案進行載入。注意 autoload 函式只有在試圖使用未被定義的類時自動呼叫。1 使用 autoload 函式實現自動載入 init.php 注意 使...