1. 程式人生 > >[學習筆記]php中的過載與自動載入

[學習筆記]php中的過載與自動載入

過載技術
通常含義:
在一個類(物件)中有多個名字相同但形參不同的方法的現象。
過載在php中的含義:
當對一個物件或類使用其未定義的屬性或方法的時候,其中的一些“處理機制”
屬性過載:
取值:當對一個物件的不存在的屬性進行“取值”的時候,就會自動呼叫方法:__GET()   //可以有一個形參,記錄名字
賦值:當對當對一個物件的不存在的屬性進行“賦值”的時候,就會自動呼叫方法:__SET()//可以有兩個形參,名字 值
判斷(isset):當對一個物件的不存在的屬性進行“isset判斷”的時候,就會自動呼叫方法:__isset()
銷燬(unset):當對一個物件的不存在的屬性進行“unset銷燬”的時候,就會自動呼叫方法:__unset()
注:前提是類中存在(定義)了這些方法的具體內容。
   被稱為魔術方法
方法過載:
當對一個物件的不存在的方法進行“呼叫”的時候,會自動呼叫類中的__call()這個魔術方法
__call($methedName,$argument){}
//必須帶兩個形參:方法名 實引數據(是一個數組)
介面interface
只能放抽象方法和常亮的一種類
定義形式:
interface 介面名{
常亮1;
常亮2;
……
抽象方法;
}
使用:介面名稱::常量名稱;
//抽象方法不用abstact修飾
介面對沒有多繼承的類之間關係的一個補充;
class xxx implements xxx,xxx{}
//實現介面
$rec = mysql_fetch_assoc($result);  //資料匹配到陣列$rec
類的自動載入 __autoload
含義:
當某行程式碼需要一個類的會後,php的內部機制可以做到“自動載入該類檔案”,以滿足該行需要一個類的這種需求。
什麼時候需要一個類:
1.new一個物件的時候;
2.使用一個類的靜態方法的時候;
3.習慣上,類檔案的命名要有一定的“規則”,通常是:類名.class.php
4.通常,我們需要將各種類,儲存在一些特定的目錄中,以方便確定其位置
5.在該自動載入的函式中,充分使用傳過來的類名,以構建一個合適的檔案路徑並載入。
function __autoload($class_name){
require "./class/".$class_name.".class.php";
}
$obj1=new A();  //此時需要A這個類,就會自動呼叫__autoload函式,並將A類名(字串)傳過去
自動載入函式(自定義)
spl_autoload_register("autoload1");
@作用:不報錯??
例:<?php
spl_autoload_register("autoload1");
spl_autoload_register("autoload2");
function autoload1($class_name){
$file = './class'.$class_name.'.class.php';
if(file_exists($file)){
include_once $file;
}
}
function autoload2($class_name){
$file = './lib'.$class_name.'.class.php';
if(file_exists($file)){
include_once $file;
}
}
$a1=new A();  //這個類在class目錄下
var_dump($a1);
$b1=new B();//這個類在lib目錄下
var_dump($b1);