來聊聊,spl_autoload_register的前世今生

?

本文將會帶你了解屬于spl_autoload_register的故事。

?

前言

?

咔咔整理了一個路線圖,著手打造一份面試寶典,準備按照這樣的路線圖進行編寫文章,后期發現沒有補充到的知識點在進行添加。也期待各位伙伴一起來幫助補充一下。評論區見哦!

?

來聊聊,spl_autoload_register的前世今生
在這里插入圖片描述

一、spl_autoload_register前世今生

在剛剛接觸php沒有使用框架之前相信大多數伙伴都用過includerequire,當然還有include_once和require_once。

這倆個區別還記得嗎?

include引入報錯時只會有警告,而require則會直接讓腳本停止。

在PHP5.3引入了命名空間的概念,為此在PHP文檔中記載著11年前一位貢獻者是這樣說的,I made this benchmark to ensure that I don’t recommend something that could be called “nice, but slow” later。

翻譯過來是“我做的這個測試,是為了確保我以后不推薦可以稱之為不錯,但是很慢的東西”。

做的這個測試就是定義了10個文件夾,每個文件夾有10個子文件夾并且每個子文件夾里都有10個類,然后使用了autoload和spl_autoload對比之后,平均執行時間多50ms。

那么這個東西指的就是_autoload(),終將這個方法在PHP7.2被廢棄。

那么除了效率問題之外還有一個原因最終廢棄了_autoload這個方法。

spl_autoload_register可以根據自己需求寫多個,加載順序是按照隊列方式,先進先出。

autoload是全局函數,所以只能定義一次,多次定義會報錯。如果一個項目使用多個框架實現,就會引發這樣的問題。

二、spl_autoload_register簡單使用

這個函數只有三個參數,第一個參數為自動加載的函數,第二參數為自動注冊的函數失敗時是否拋出異常,第三個參數為添加函數到隊列之首,而不是隊列尾部。

以上都是根據true定義的。

定義倆個文件say和user

say文件聲明一個類Say并且設置一個方法hello

來聊聊,spl_autoload_register的前世今生
在這里插入圖片描述

這時來到user文件,我們需要先定義一個autoload方法,然后使用spl_autoload_register進行注冊

來聊聊,spl_autoload_register的前世今生打印出來的數據結果來聊聊,spl_autoload_register的前世今生

?

堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在偌大互聯網中咔咔的文章能帶給你一絲絲幫助。

?

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享