PHP学习笔记——Php文件引入
在工作日常開發中,我最常用的文件引用莫過于include(include_once),以及require(require_once),這兩種引用已經滿足了日常簡單CGI的開發需要,但是當深入了解PHP框架的內容,就會發現單單這兩個關鍵字遠遠不夠,本文整理了部分php文件引用所涉及的知識。
?
首先簡要的介紹一下include和require的用法
1.include
被包含文件先按參數給出的路徑尋找,如果沒有給出目錄(只有文件名)時則按照 include_path(定義于php配置文件)指定的目錄尋找。如果在 include_path 下沒找到該文件則 include 最后才在調用腳本文件所在的目錄和當前工作目錄下尋找。
?
2.require語句
require 和 include 幾乎完全一樣,除了處理失敗的方式不同之外。require 在出錯時產生 E_COMPILE_ERROR 級別的錯誤。換句話說將導致腳本中止,而 include 只產生警告(E_WARNING),腳本會繼續運行。
?
3.autoload機制
__autoloader函數是默認用于載入未知PHP類的函數,當再php代碼中出現了未知類時,程序將會自動調用該函數,函數原型及一種簡單的實現如下
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
<?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()函數的目的是為了讓我們可以手動去調用spl_autoload_register()注冊隊列中的回調函數,常規情況下,只有遇到未知類才會調用autoloader隊列中的回調函數,spl_autoload_call可以實現手動調用,依次調用隊列中的回調函數直到成功加載到未知類。
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 關鍵字
use語句可以引用其他名空間中的類。Php名空間的作用跟其他語言的名空間作用一樣,用于解決第三方的類中變量及函數的沖突問題。
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
轉載于:https://www.cnblogs.com/sworddance/p/4280736.html
總結
以上是生活随笔為你收集整理的PHP学习笔记——Php文件引入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Objective-c》-(OC中含有
- 下一篇: AES-256 加密 PHP实现