再看Yii2框架中是如何使用命名空間的

首先來看一段簡單的代碼

<?php
namespace app\models;
use yii\db\ActiveRecord;
Class UserInfo extends ActiveRecord
{
    public static function tableName(){
        return "user_info";
    }
}
?>

不考慮Yii框架的狀況下,該段代碼確定是有問題的。由於use關鍵字自己只是對已有的命名空間起個別名,以方便後續能夠簡化使用。上面代碼的 use yii\db\ActiveRecord 等價於 use yii\db\ActiveRecord as ActiveRecord.
因此下面用ActiveRecord的時候應該指的是yii\db\ActiveRecord。要想真正使用這個類,必需要include或者require進來實際的php文件的。而這段代碼並無顯示的引入。
那麼在沒有顯示引入的狀況下,這段代碼在Yii框架下是能夠正常運行的。
這就說明一個問題,Yii2框架必然是在背後悄悄的把文件給引入了。這個文件並非由php解釋器解釋,而是先由Yii框架翻譯事後才交由php解釋器的。php

Yii怎麼識別use的呢?

這就涉及到了Yii2框架的自動加載機制,自動加載機制的原理後續在研究,這裏先分析下,yii怎麼解析use的。
首先yii根據use的路徑,獲取別名,而後根據別名獲取真實文件路徑,而後經過require或include加載進來。
而對路徑解析的時候分隔目錄中的第一級,例如yii或者app,轉化爲別名的時候前面會加上@, @yii和@app別名對應的應該是yii框架目錄的真實路徑和應用程序根目錄的真實路徑。app

相關文章
相關標籤/搜索