1. 程式人生 > >PHP自動載入類—__autoload()和spl_autoload_register()

PHP自動載入類—__autoload()和spl_autoload_register()

 

test.php

<?php
function __autoload($class_name) 
{
    require_once $class_name . '.php';
}
$obj  = new j();

?> 

當前目錄下有j.php

<?php
class j
{
    function __construct() 
    {
    echo "成功載入";
    } 
}
?>


正常輸出:成功載入

修改test.php程式碼

 <?php
function __autoload($class_name) 
{
    require_once $class_name . '.php';
}
$obj  = new k();
?> 


執行test.php報錯:

Warning: require_once(k.php) [function.require-once]: failed to open stream: No such file or directory in F:\website\test.php on line 11

Fatal error
: require_once() [function.require]: Failed opening required 'k.php' (include_path='.;C:\php5\pear') in F:\website\test.php on line 11

恢復test.php程式碼

但是將j.php移到另外目錄錄入k下,

執行test.php報錯:

Warning: require_once(j.php) [function.require-once]: failed to open stream: No such file or directory in F:\website\test.php on line 11

Fatal error
: require_once() [function.require]: Failed opening required 'j.php' (include_path='.;C:\php5\pear') in F:\website\test.php

on line 11

這個時候是因為找不到j.php

所以需要修改test.php程式碼

<?php
    
function __autoload($class_name) 
{
    require_once "k/".$class_name . '.php';
}
$obj  = new j();
?> 

-----------------------------------------------------------------------------

為什麼使用自動載入?
 

包含一般檔案較少的情況會用手動包含要使用的類檔案
當要包含大量類檔案的時候,這樣就會顯得麻煩,就可以使用自動包含類。

類檔案:test.php

class Test
{
   public function __construct()
   {
       echo __CLASS__.__FUNCTION__;
   }
}


 
1.手動包含:

require_once('test.php');
$test = new Test();


2.使用__autoload()自動包含:

// 這樣例項化一個類的時候,將會自動包含同名的類檔案
// 需要過載__autoload方法,自定義包含類檔案的路徑
function __autoload($classname)
{
    $class_file = strtolower($classname).".php";
    if (file_exists($class_file)){
        require_once($class_file);
    }
}
$test = new Test();

3.使用spl_autoload_register() 自定義的方法來載入檔案
語法:bool  spl_autoload_register ( [callback $autoload_function] )

function myLoader($classname)
{
    $class_file = strtolower($classname).".php";
    if (file_exists($class_file)){
        require_once($class_file);
    }
}
// 註冊自定義方法
spl_autoload_register("myLoader");

$test = new Test();

也可以使用類的方法來實現自定義的載入函式

class autoLoader
{
    public static function myLoader($classname)
    {
        $class_file = strtolower($classname).".php";
        if (file_exists($class_file)){
            require_once($class_file);
        }
    }
}

// 通過陣列的形式傳遞類和方法,元素一為類名稱、元素二為方法名稱
// 方法為靜態方法
spl_autoload_register(array("autoLoader","myLoader"));

$test = new Test();

相關推薦

PHP自動載入__autoload()spl_autoload_register()

 test.php<?php function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new j(); ?> 當前目錄下有j.php<?p

php自動載入的方法

php自動載入類的方法 廢棄的函式:__autoload(): test.class.php: <?php class test{ public function index(){ return "index"; } } ?>  demo.php例項

php 自定義 autoload.php 自動載入

* 目錄結構 * autoload.php <?php // autoload ./et/lib spl_autoload_register(function($class) { $prefix = 'et\\lib'; $base_dir =

php自動加載_autoload()spl_autoload_register()實例詳解

http obj 自動加載 完整 echo register auto 文件名 代碼 一、_autoload 自動加載類:當我們實例化一個未定義的類時,就會觸此函數。到了php7.1以後版本不支持此函數好像拋棄了   新建一個類文件名字自己隨便去:news類在auto.ph

PHP 檔案的自動載入機制 __autoload()

如果一個類在多個指令碼中都需要使用,可以將一個類的定義程式碼,單獨的封裝到一個檔案中,這種檔案也叫作類檔案,在需要的時候,將整個檔案載入進來即可!PHP在執行的時候,如果發現需要一個類(只要是和這個類相關的任何的操作),但此時當前指令碼又沒有這個類的定義程式碼,也沒有手動載入

php自動載入指定目錄下的檔案

網上找到的類,非常有用,檔名: autoload.php <?php /** * Created by PhpStorm. * User: zcm * Mail: [email protected] * Date: 2018/10/10 上午10

PHP自動載入 spl_autoload_register

內容描述:      剛開始自學PHP的時候,一個功能類單獨寫一個檔案,引入類檔案時用 require_once "類檔案路徑";後來工作中接觸thinkPHP3.2.3框架,發現框架中引入類檔案的方式用的是 名稱空間 配合 spl_autoload_register()

spl_autoload_register 註冊自己的自動載入函式(__autoload())

說明: PHP例項化沒有載入的類的,會自動呼叫__autoload();函式載入,可以通過__autolaod()函式來require類,解決很多類,多次require的問題, 可以通過spl的標準PHP 庫函式Standard PHP Library (SPL) 的 autoload 的方法spl_aut

PHP中的use、名稱空間、引入檔案、自動載入的理解

<div class="postBody"> <div id="cnblogs_post_body" class="cnblogs-markdown"><p>use只是使用了名稱空間,<br>

php自動載入機制

為什麼要實現自動載入機制? 在大專案中,就不用每次include/require檔案,省心又高效,只要你不嫌累的話,就可以不使用。 一、spl_autoload_register 語法: sql_autoload_register(callback $function_n

php 自動載入函式

剛開始接觸自動載入函式的時候,以為只有__autoload();最近了解到php5.1以上有了spl_autoload_register這個函式,解決了__autoload只能定義一次的問題,官方給出的定義是–註冊給定的函式作為 __autoload 的實現。 三個引數:欲註冊的自動裝載函式

PHP自動匯入

自動require出所需要的類檔案,支援PSR系列規範 spl_autoload_register(function ($class) { $classNames = explode('\\',$class); if (count($classNames)&gt;1) {

php 自動載入規範 psr0 psr4 詳解

1.psr0  這是個啥東西呢,這是一個標準。    一個實現自動載入類的標準。    在這之前你需要先了解__autoload 和spl_autoload_register這兩個方法。    為什麼要實現這個標準呢? 如果整個專案是自己寫的不需要任何其他人的程式碼,那好。

PHP自動登入的實現Cookie的安全性(UCHome的實現方法)

網站自動登入,即“記住我”、一週內免登入等,一般都是利用 cookie 來實現的。cookie 儲存了使用者名稱和密碼等資訊,再次訪問時,將 cookie 資料查詢資料庫對比。 使用者名稱可以直接儲存到 cookie裡,而密碼必須經過加密處理,並保證加密演算法難以破解、且能

PHP-自動載入原理分析

說起PHP的自動載入,很多同學可能都會想到各種框架的自動載入功能,PHP規範中的PSR0和PSR4原則,Composer的自動載入功能等等,這些都為我們的開發提供了很大的方便。 那麼PHP自動載入的前因後果到底是什麼?PHP的內部原理又是怎麼樣的呢?接下來我就

PHP設計模式:自動載入、PSR-0規範、鏈式操作、11種面向物件設計模式實現使用、OOP的基本原則自動載入配置

一、類自動載入      SPL函式 (standard php librarys)      類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs

php spl_autoload_register自動載入,省去引入檔案

class Autoloaders{ /** * 類庫自動載入,寫死路徑,確保不載入其他檔案。 * @param string $class 物件類名 * @ret

PHP 名稱空間與自動載入機制介紹,spl_autoload_register, __autoload 函式

include 和 require 是PHP中引入檔案的兩個基本方法。在小規模開發中直接使用 include 和 require 沒喲什麼不妥,但在大型專案中會造成大量的 include 和 require 堆積。這樣的程式碼既不優雅,執行效率也很低,而且維護起來也相當困難。 為了解決這個問題,部分框

淺析PHP自動載入名稱空間

php是使用require(require_once)和include(include_once)關鍵字載入類檔案。但是在實際的開發工程中我們基本上不會去使用這些關鍵字去載入類。 因為這樣做會使得程式碼的維護相當的困難。實際的開發中我們會在檔案的開始位置用use關鍵字使用類,然後直接new這個類就可以了. 至

_autoload 自動加載spl_autoload_register()函數

obj title 技術分享 .class auto 自己 req tool () 一、_autoload 自動加載類:當我們實例化一個未定義的類時,就會觸此函數。到了php7.1以後版本不支持此函數好像拋棄了   新建一個類文件名字自己隨便去:news類在auto.