PHP學習筆記——Php文件引入

在工做平常開發中,我最經常使用的文件引用莫過於include(include_once),以及require(require_once),這兩種引用已經知足了平常簡單CGI的開發須要,可是當深刻了解PHP框架的內容,就會發現單單這兩個關鍵字遠遠不夠,本文整理了部分php文件引用所涉及的知識。php

 

首先簡要的介紹一下include和require的用法框架

1.include函數

被包含文件先按參數給出的路徑尋找,若是沒有給出目錄(只有文件名)時則按照 include_path(定義於php配置文件)指定的目錄尋找。若是在 include_path 下沒找到該文件則 include 最後纔在調用腳本文件所在的目錄和當前工做目錄下尋找。ui

 

2.require語句this

require include 幾乎徹底同樣,除了處理失敗的方式不一樣以外。require 在出錯時產生 E_COMPILE_ERROR 級別的錯誤。換句話說將致使腳本停止,而 include 只產生警告(E_WARNING),腳本會繼續運行。spa

 

3.autoload機制code

__autoloader函數是默認用於載入未知PHP類的函數,當再php代碼中出現了未知類時,程序將會自動調用該函數,函數原型及一種簡單的實現以下blog

function __autoload($classname) {

    $filename = "./". $classname .".php";

    include_once($filename);

}

 

一般在各個類型不一樣的類中能夠實現本身的__autoload()函數,若是但願註冊本身的__autoLoade函數則可使用spl中的spl_autoload_register(),該函數能夠將自定義的函數放入autoloader隊列當中,當autoloader被觸發是,將會依次調用隊列中的函數。隊列

spl_autoload_register()原型以下開發

 

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

 

spl_autoload_register能夠被調用屢次,將多個自定義的回調函數插入到autoload函數隊列當中。

 

 

__autoloader()函數在ZEND引擎中有一個默認的實現,就是spl_autoload(),當不肯意本身實現__autoloader()函數的時候,可使用這個php自帶的載入函數,一般該函數會和spl_autoload_extensions()函數一塊兒使用,spl_autoloader_extensions()能夠指定所包含類所在文件的擴展名,spl_autoload()函數會依據類名+擴展名的形式,在include_path當中尋找對應類所在的文件。以後在代碼中調用不含參數的spl_autoload_register()就能夠在該程序中調用默認的spl_autoload()函數。

 

A. class.php

<?php

class A{ 

function write(){

echo 「I am A」;

}

}

?>

 

 

B.php

<?php

spl_autoload_extensions(「.class.php」);

spl_autoload_register();

$a=new A();  

$a->write();  // I am A

?>

 

 

spl_autoload_call()函數的目的是爲了讓咱們能夠手動去調用spl_autoload_register()註冊隊列中的回調函數,常規狀況下,只有遇到未知類纔會調用autoloader隊列中的回調函數,spl_autoload_call能夠實現手動調用,依次調用隊列中的回調函數直到成功加載到未知類。

A. php

<?php

 class A{}

?>

 

 

B. php

<?php

function A($class){ echo "A";};

function B($class) {echo "B";include($class.".php");};

 

spl_autoload_register(A);

spl_autoload_register(B);

spl_autoload_call("A");  //輸出 AB

?>

 

 

4.use 關鍵字

use語句能夠引用其餘名空間中的類。Php名空間的做用跟其餘語言的名空間做用同樣,用於解決第三方的類中變量及函數的衝突問題。

A.php

<?php

namespace TEST;

class A{

function myfunc(){

echo "this A::myfunc \n";

}

}

 

 

B.php

<?php

use TEST\A;

require_once("A.php");

class B{

function myfunc(){

print "this B::myfunc \n";

}

}

$b=new B();

$b->myfunc();

$a=new A;

$a->myfunc();

 

 

輸出:

this B::myfunc 

this A::myfunc

相關文章
相關標籤/搜索