PHP學習筆記——Php檔案引入

來源:互聯網
上載者:User

標籤:

在工作日常開發中,我最常用的檔案引用莫過於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

<?php class 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

PHP學習筆記——Php檔案引入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.