1. 程式人生 > >PHP自動載入 spl_autoload_register

PHP自動載入 spl_autoload_register

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

一、無名稱空間同一個目錄下

目錄結構
MyClass1.class.php檔案內容:
<?php
class MyClass1
{
    function __construct()
    {
        echo 'This is MyClass1 <br>';
    }
}


MyClass2.class.php檔案內容:
<?php
class MyClass2
{
    function __construct()
    {
        echo 'This is MyClass2 <br>';
    }
}


index.php檔案內容:
<?php
//自動載入
spl_autoload_register(function ($class_name) {
    require_once $class_name . '.class.php’;
});

$obj  = new MyClass1();
$obj2 = new MyClass2();

echo 'END <br>’;


執行效果:https://www.httpsdomain.com/index.php This is MyClass1  This is MyClass2  END  OK

二、有名稱空間,不在同一個目錄中的類

目錄結構如下:
/Animal/Cat.class.php檔案內容如下:
<?php
namespace Animal;
class Cat
{
    function __construct()
    {
        echo 'This is a Cat Class!<br>';
    }
}


/Anima/Dog.class.php檔案內容如下:
<?php
namespace Animal;
class Dog
{
    function __construct()
    {
        echo 'This is a Dog Class!<br>';
    }
}


如果不使用自動載入,按照原有的require_once,那麼 /index.php檔案內容如下:
<?php

require_once "Animal/Dog.class.php";

$dog = new Dog();

echo 'END <br>’;


如果使用自動載入,那麼/index.php檔案內容如下:
<?php
//自動載入
spl_autoload_register(function ($class_name) {
    $class_name = str_replace('\\','/', $class_name); /*將 use語句中的’\’替換成’/‘,避免造成轉移字元導致require_once時會報錯*/
    require_once $class_name . '.class.php';        /*檔案的字尾名是 .class.php*/
});
use Animal\Dog;

$dog = new Dog();

echo 'END <br>’;


執行結果:
如果不在程式碼開頭寫 user Animal\Cat;那麼在例項化類時,就必須寫完整的類路徑。/index.php檔案內容如下:
<?php
//自動載入
spl_autoload_register(function ($class_name) {
    $class_name = str_replace('\\','/', $class_name); /*將 use語句中的’\’替換成’/‘,避免造成轉移字元導致require_once時會報錯*/
    require_once $class_name . '.class.php’;        /*檔案的字尾名是 .class.php*/
});
use Animal\Dog;

$dog = new Dog();
$cat = new \Animal\Cat();

echo 'END <br>';


執行結果:

不同名稱空間的類 不同路徑的類檔案

如/Logic/Activity/ActivityOne.class.php檔案 與 /Animal/Dog.class.php檔案,目錄如下:
/Logic/Activity/ActivityOne.class.php檔案內容如下:
<?php
namespace Logic\Activity;
class ActivityOne
{
    function __destruct()
    {
        echo 'This is a ActivityOne Class!\Logic\Activity\ActivityOne.class.php<br>';
    }
}


/index.php檔案內容如下:
<?php
//自動載入
spl_autoload_register(function ($class_name) {
    $class_name = str_replace('\\', '/', $class_name);
    $file_name  = $class_name . '.class.php';
    if (file_exists($file_name)) {
        require_once $file_name;
    }
});
use Animal\Dog;
use Logic\Activity\ActivityOne;

$dog = new Dog();
$A   = new ActivityOne();


執行結果:

注意

    1.名稱空間與檔案路勁的對應關係:如use Animal\Dog; Dog類的存放路徑必須是在Animal資料夾中,否則引入檔案是會報錯找不到檔案。
    2.類檔案的字尾名必須統一:如以’.class.php'結尾

相關推薦

PHP自動載入 spl_autoload_register

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

php自動載入機制

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

php 自動載入函式

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

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.php <?php /** * Created by PhpStorm. * User: zcm * Mail: [email protected] * Date: 2018/10/10 上午10

php 自動載入規範 psr0 psr4 詳解

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

PHP-自動載入原理分析

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

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

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

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

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

php設計模式--命名空間與自動載入

使用 命令 說明 自動載入 str space () 就會 sta 關於命名空間:   最早的php是沒有命名空間的概念的,這樣不能存在相同名稱的類或者函數,當項目變大了之後,產生沖突的可能性就高了,代碼量也會變大,為了規劃,從php5.3開始對命名空間就支持了。 說明代碼

php命名空間+spl_autoload_register實現類的自動加載

direct index.php spl rec esp hello require gist pac 自動加載方法: function my_autoload($name){ $name = str_replace(‘\\‘,DIRECTORY_SEPARATOR,$na

PHP規範PSR4(自動載入)介紹

本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC 2119中的描述進行解釋。 1 概述 此PSR描述了從檔案路徑自動載入類的規範。它完全可互操作,除了包括PSR-0在內的任何其他自動載入規範外,還可以使用它。此P

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

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

PHP的類自動載入機制

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

PHP什麼是自動載入

what is 自動載入? 或許你已經對自動載入有所瞭解。簡單描述一下:自動載入就是我們在new一個class的時候,不需要手動去寫require來匯入這個class.php檔案,程式自動幫我們載入匯入進來。這是php5.1.2(好像是)版本新加入一個功能,他解放了程式設計師的雙手,不

tp3.2不能自動載入公共配置檔案config.php

原因在: 1:ThinkPHP.php           呼叫了Think.class.php類檔案start()的靜態方法 2: 開啟ThinkPHP3.2的入口檔案ThinkPHP.php,找到33行

php錯誤處理,自動載入,以及棧堆記憶體和執行模式堆淺解 (轉)

Php錯誤處理 Php錯誤級別: E_ERROR 致命錯誤,會終止指令碼執行.值為1 E_WARNING 警告錯誤,給出提示,不會終止執行值為2 E_PARSE 編譯時的語法解析錯誤,解析錯誤僅僅由分析器產生。值為4 E_NOTICE 執行時通知錯誤,表示指令

PHP類的自動載入

__autoload 嘗試載入未定義的類,PHP7.2棄用此函式。假定同一目錄下有foo.php和test.php兩個檔案。 PHP5.3以前__autoload函式丟擲的異常不能被catch語句塊捕獲並會導致一個致命錯誤。PHP5.3起能夠thrown自定義的異常,隨後