PHP学习笔记——Php文件引入
在工作日常開發(fā)中,我最常用的文件引用莫過于include(include_once),以及require(require_once),這兩種引用已經(jīng)滿足了日常簡(jiǎn)單CGI的開發(fā)需要,但是當(dāng)深入了解PHP框架的內(nèi)容,就會(huì)發(fā)現(xiàn)單單這兩個(gè)關(guān)鍵字遠(yuǎn)遠(yuǎn)不夠,本文整理了部分php文件引用所涉及的知識(shí)。
?
首先簡(jiǎn)要的介紹一下include和require的用法
1.include
被包含文件先按參數(shù)給出的路徑尋找,如果沒有給出目錄(只有文件名)時(shí)則按照 include_path(定義于php配置文件)指定的目錄尋找。如果在 include_path 下沒找到該文件則 include 最后才在調(diào)用腳本文件所在的目錄和當(dāng)前工作目錄下尋找。
?
2.require語(yǔ)句
require 和 include 幾乎完全一樣,除了處理失敗的方式不同之外。require 在出錯(cuò)時(shí)產(chǎn)生 E_COMPILE_ERROR 級(jí)別的錯(cuò)誤。換句話說將導(dǎo)致腳本中止,而 include 只產(chǎn)生警告(E_WARNING),腳本會(huì)繼續(xù)運(yùn)行。
?
3.autoload機(jī)制
__autoloader函數(shù)是默認(rèn)用于載入未知PHP類的函數(shù),當(dāng)再php代碼中出現(xiàn)了未知類時(shí),程序?qū)?huì)自動(dòng)調(diào)用該函數(shù),函數(shù)原型及一種簡(jiǎn)單的實(shí)現(xiàn)如下
function __autoload($classname) {$filename = "./". $classname .".php";include_once($filename);}?
通常在各個(gè)類型不同的類中可以實(shí)現(xiàn)自己的__autoload()函數(shù),如果希望注冊(cè)自己的__autoLoade函數(shù)則可以使用spl中的spl_autoload_register(),該函數(shù)可以將自定義的函數(shù)放入autoloader隊(duì)列當(dāng)中,當(dāng)autoloader被觸發(fā)是,將會(huì)依次調(diào)用隊(duì)列中的函數(shù)。
spl_autoload_register()原型如下
?
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
?
spl_autoload_register可以被調(diào)用多次,將多個(gè)自定義的回調(diào)函數(shù)插入到autoload函數(shù)隊(duì)列當(dāng)中。
?
?
__autoloader()函數(shù)在ZEND引擎中有一個(gè)默認(rèn)的實(shí)現(xiàn),就是spl_autoload(),當(dāng)不愿意自己實(shí)現(xiàn)__autoloader()函數(shù)的時(shí)候,可以使用這個(gè)php自帶的載入函數(shù),通常該函數(shù)會(huì)和spl_autoload_extensions()函數(shù)一起使用,spl_autoloader_extensions()可以指定所包含類所在文件的擴(kuò)展名,spl_autoload()函數(shù)會(huì)依據(jù)類名+擴(kuò)展名的形式,在include_path當(dāng)中尋找對(duì)應(yīng)類所在的文件。之后在代碼中調(diào)用不含參數(shù)的spl_autoload_register()就可以在該程序中調(diào)用默認(rèn)的spl_autoload()函數(shù)。
?
A. class.php
<?phpclass A{ function write(){echo “I am A”;}}?>?
?
B.php
<?phpspl_autoload_extensions(“.class.php”);spl_autoload_register();$a=new A(); $a->write(); // I am A?>?
?
spl_autoload_call()函數(shù)的目的是為了讓我們可以手動(dòng)去調(diào)用spl_autoload_register()注冊(cè)隊(duì)列中的回調(diào)函數(shù),常規(guī)情況下,只有遇到未知類才會(huì)調(diào)用autoloader隊(duì)列中的回調(diào)函數(shù),spl_autoload_call可以實(shí)現(xiàn)手動(dòng)調(diào)用,依次調(diào)用隊(duì)列中的回調(diào)函數(shù)直到成功加載到未知類。
A. php
<?phpclass A{}?>?
?
B. php
<?phpfunction 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 關(guān)鍵字
use語(yǔ)句可以引用其他名空間中的類。Php名空間的作用跟其他語(yǔ)言的名空間作用一樣,用于解決第三方的類中變量及函數(shù)的沖突問題。
A.php
<?phpnamespace TEST;class A{function myfunc(){echo "this A::myfunc \n";}}?
?
B.php
<?phpuse 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
轉(zhuǎn)載于:https://www.cnblogs.com/sworddance/p/4280736.html
總結(jié)
以上是生活随笔為你收集整理的PHP学习笔记——Php文件引入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Objective-c》-(OC中含有
- 下一篇: Three.js的绘制流程(三)----