類延遲載入

2021-07-30 20:16:50 字數 1965 閱讀 2577

在php中,想要例項化乙個類,必須先在例項化之前載入類:

require

..../class1.php 或者 include ...

./class1.php

require

..../class2.php 或者 include ...

./class2.php

$try

=new class1;

$try1

=new class2;

這樣的做法使即時不會馬上用到的類都要一次性全部載入,導致效率下降

php5以後,引入函式spl_autoload_register(),現在大多數框架都有使用,使用spl_autoload_register之前需要先設定乙個自動裝載函式,規定了引數與實際類路徑的關係及載入方式。

function autoload($class)

然後將這個函式註冊到spl函式中

spl_autoload_register(「autoload」);

這樣,當例項化乙個未載入的類時,會觸發spl_autoload_register函式,進而觸發autoload函式,將class載入,這就是所謂的類延遲載入。

yii2中是如何使用自動載入的?這個先定位到入口檔案的index.php中:

// comment out the following two lines when deployed to production

defined('yii_debug') or

define

('yii_debug', true);

defined('yii_env') or

define

('yii_env', 'dev');

require(__dir__ .

'/../vendor/autoload.php');

require(__dir__ .

'/../vendor/yiisoft/yii2/yii.php');

$config

=require(__dir__ .

'/../config/web.php');

autoload.php是第三方的類載入,只要保證yii.php在最後面,就可以確保其可以將自己的autoloader插入到整個autoloder 棧的最前面,從而在需要時最先被呼叫。

再來看看yii.php的

class yii extends \yii\baseyii

spl_autoload_register([『yii』, 『autoload』], true, true);

yii::$classmap = require(dir. 『/classes.php』);

yii::$container = new yii\di\container();

註冊的是baseyii.php中的autoload函式,然後yii將 calsses.php 這個檔案作為乙個對映表儲存到 yii::$classmap 當中。這個對映表,儲存了一系列的類名與其所在php檔案的對映關係。

最後看一下auto函式的奧秘:

public

static

function

autoload

($classname)

} elseif (strpos($classname, '\\') !== false)

} else

include($classfile);

if (yii_debug && !class_exists($classname, false) && !inte***ce_exists($classname, false) && !trait_exists($classname, false))

}

這個函式的大意就是看引數如果是乙個字串,就搜尋看看有沒有這個別名,找到對應路徑,如果引數是乙個路徑,就直接找到路徑,否則就報錯!

懶載入 延遲載入

概念 為了推遲和資料庫互動的時間,推遲到真正需要這個物件資料的時候。提高系統的效能 通過 asm和cglib二個jar包實現懶載入。domain是非final的 1 session.load懶載入 1 返回的是乙個 物件,new關鍵字來建立乙個 物件,理解成乙個快捷方式,不是真正的類,而是 類。2 ...

同步載入 非同步載入 延遲載入

一 同步載入 平常預設用的都是同步載入。如 同步模式又稱阻塞模式,會阻止瀏覽器的後續處理,停止了後續的檔案的解析,執行,如影象的渲染。流覽器之所以會採用同步模式,是因為載入的js檔案中有對dom的操作,重定向,輸出document等預設行為,所以同步才是最安全的。通常會把要載入的js放到body結束...

延遲載入D L L

延遲載入d l l amoon100 2005 10 16 microsoft visual c 6.0提供了乙個出色的新特性,它能夠使dll的操作變得更加容易。這個特性稱為延遲載入dll。延遲載入的dll是個隱含鏈結的dll,它實際上要等到你的 試圖引用dll中包含的乙個符號時才進行載入。延遲載入...