[TOC]
# 類的自動加載
include和require關鍵字是通過手動方式對對應文件進行包含,實際上php提供了一個更方便的,類的自動加載方法
通過魔術方法 `__autoload(string $class)` 實現,也可以通過函數 `spl_autoload_register` 注冊一個自動加載方法
~~~
function __autoload($class) {
require_once($class.".php");
}
~~~
通常用spl_autoload_register注冊自定義的函數作為自動加載類實現,因為`__autoload()`魔術方法只可以定義一次
# laravel中的使用
類的自動加載函數是在Composer\Autoload\ClassLoader類中實現的,實例化該類并將類的命名空間與文件路徑的對應關系注冊到相應屬性中,然后通過實例方法 `register($prepend=false)` 注冊一個類自動加載函數,即為該類實例的loadClass方法,并且將其注冊在類自動加載函數隊列的末尾,當使用一個為包含的類名時,會自動調用loadClass方法并通過參數獲取包含命名空間的類名信息,接著根據類的命名空間與文件路徑的對應關系查找文件路徑,最后通過includeFile()函數包含該文件,實現類的自動加載
默認laravel包含2個類的自動加載函數,其中一個是在外觀注冊(`Illuminate\Foundation\Bootstrap\RegisterFacades`類實現的)過程中實現的,在注冊過程中也是先實例化后調用register()函數,進而調用prependToLoaderStack()函數,將`load($alias)`函數注冊為類的自動加載函數,該函數的作用主要是將外觀別名與外觀名(Facades)對應起來,從而實現對應外觀類的靜態方法調用
~~~
<?php
namespace Illuminate\Foundation;
class AliasLoader
{
//加載一個類別名,實際上是給外觀類起了一個別名,使兩者對應一個類
public function load($alias)
{
if (isset($this->aliases[$alias])) {
return class_alias($this->aliases[$alias], $alias);
}
}
//添加別名到自動加載函數中
public function alias($class, $alias)
{
$this->aliases[$class] = $alias;
}
//注冊自動加載函數到自動加載堆棧中
public function register()
{
if (! $this->registered) {
$this->prependToLoaderStack();
$this->registered = true;
}
}
//將類的自動加載函數添加到自動加載堆棧首部
protected function prependToLoaderStack()
{
spl_autoload_register([$this,'load'],true,true);
}
}
~~~
- 書列表
- laravel框架關鍵技術
- 第一章 組件化開發與composer使用
- 簡介
- composer
- 添加路由組件
- 添加控制器模塊
- 添加模型組件
- 添加視圖組件
- 第三章 laravel框架中常用的php語法
- 匿名函數
- 文件包含
- 魔術方法
- 魔術常量
- 反射
- 后期靜態綁定
- traits
- 第四章 laravel框架中使用的HTTP協議基礎
- HTTP協議
- 數據庫
- 數據遷移
- 第六章 laravel框架中的設計模式
- IOC模式
- php核心技術與最佳實踐
- 第一章面向對象核心
- 反射
- 簡單ORM
- 異常和錯誤
- 接口
- 第二章,面向對象設計
- 設計原則
- 單一職責
- 接口隔離
- 開放封閉
- 替換原則
- 依賴倒置
- linux是怎么寫的呢?
- 第三章 正則表達
- 認識正則
- 第四章 php網絡技術應用
- HTTP協議詳解
- php和http相關函數
- 垃圾信息防御措施
- 現代操作系統
- 引論
- sql必知必會
- 限制結果
- 按位置排序
- where求職順序
- IN操作符
- like
- 函數
- group by
- 組合查詢
- 插入檢索出的數據
- 視圖
- 高性能mysql
- 第一章節 mysql架構與歷史
- mysql架構邏輯圖
- 連接與管理
- 優化與運行
- 讀寫鎖
- 鎖粒度
- 表鎖(table lock)
- 行級鎖(row lock)
- ACID
- 隔離級別
- 死鎖
- 隱式和顯式鎖定
- 多版本并發控制
- Innodb概覽
- 第四章節 Schema與數據類型優化
- 選擇優化的數據類型
- 日期和時間類型
- 標識列
- 特殊類型數據
- 表設計中的缺陷
- 范式
- 計數器表
- 第五章 創建高性能索引
- 索引基礎
- 索引類型
- 索引的優點
- 高性能索引策略
- 選擇合適的索引列順序
- 聚簇索引
- 順序的主鍵什么時候會造成更壞的后果
- 覆蓋索引
- 使用索引掃描來做排序
- 壓縮索引
- 冗余和重復索引
- 索引和鎖
- 支持多種過濾條件
- 什么是范圍條件
- 優化排序
- 維護索引和表
- 表損壞
- 減少索引和數據的碎片
- 第六章 查詢性能優化
- 掃描的行數和訪問類型
- 重構查詢方式
- 查詢執行的基礎
- 重構-改善既有代碼設計
- 第一章-重構
- 什么是重構
- 第一個案列
- 重構第一步
- 王垠博客
- 多態取代價格相關邏輯