物件導向魔術方法及類的自動載入

2022-07-18 05:15:21 字數 3435 閱讀 5443

一  __get和__set

1.當去使用不可訪問的屬性時,系統就會呼叫__get方法    不可訪問屬性:該屬性不存在   直接訪問protected或private屬性

2.當去給不可訪問屬性賦值時,會呼叫__set方法

<?php 

echo '';

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;

二,__isset和__unset

1.當對不可訪問的屬性,進行了isset($物件名->屬性名),empty($物件名->屬性名),__isset函式就會被系統呼叫

2.當對不可訪問的屬性,進行了unset($物件名->屬性名),__unset函式就會被系統呼叫

<?php 

echo '';

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);

三.__tostring

當輸出乙個物件時,就會觸發該函式

1.__tostring沒有形參

2.__tostring要求返回乙個字串

3.當我們在專案開發時,需要找bug時,可以通過他輸出物件資訊

<?php 

echo '';

class cat

public function __tostring()

}$cat1 = new cat('波斯貓','

echo $cat1;

property_exists(物件名,屬性):

1.先判斷該物件是否有這個屬性,如果有則返回真

2.如果該物件沒有此屬性,則繼續判斷該物件對應的類是否定義過這個屬性,如果類定義過,就返回真

四,__clone

當將乙個物件完全的複製乙份,保證兩個物件的屬性和屬性值一樣,但他們的資料空間獨立,則可以使用物件轉殖

1.轉殖乙個物件時,轉殖方法裡面可以修改屬性的值

2.當不想被轉殖時,將轉殖方法private 例如:單例模式時

<?php 

echo '';

class sheep

public function __clone()

}$sheep1 = new sheep('羊','草');

//轉殖乙個物件

五.__call

1.當呼叫了乙個不可訪問的成員方法(成員方法不存在,成員方法為protected或private)時,__call()方法就會被呼叫

<?php 

echo '';

class number

/* 兩個引數:方法名:$method_name 引數:$parameters是個陣列

在本例中的方法名是numand 引數是:10,20

*/ public function __call($method_name,$parameters)else }}

$num3 = new number();

echo $num3->numand(10,20);

六,__autoload類的自動載入

1.當使用乙個未定義的類時,就會觸發__autoload這個函式

2.function __autoload($class_name){}   其中class_name是類名

例如:

但是,如果乙個php中引入多個類時,這樣做顯然就會麻煩了,不可能一直用require或include引入,所以可以將這些類用類名當鍵,檔名當值組成乙個陣列,放到乙個php檔案中,當用時將次php檔案引入即可;

例如:cat.class.php

<?php 

class cat

}

dog class.php

<?php 

class dog

}

common.php

<?php 

$class_arr = array(

//類名為鍵 檔案路徑為值組成的陣列

'dog'=>'./dog.class.php',

'cat'=>'./cat.class.php'

);

使用:

<?php 

echo '';

//引入放類陣列的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 注意 使...