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自定義的異常,隨後