入口檔案 web\index.php
//定義全域性變數
defined('yii_debug') or define('yii_debug', true
);defined('yii_env') or define('yii_env', 'dev');
//composer自動載入**機制,可參考
require(__dir__ . '/../vendor/autoload.php');
//1.引入工具類yii
//2.註冊自動載入函式
//3.生成依賴注入中使用到的容器
require(__dir__ . '/../vendor/yiisoft/yii2/yii.php');
//載入應用配置
$config = require(__dir__ . '/../config/web.php');
//生成應用並執行
public
function __construct($config =)
yii\base\module::setinstance($instance) 方法
publicstatic
function setinstance($instance
)
else
}
////而yii\web\errorhandler繼承自yii\base\errorhandler
protected
function registererrorhandler(&$config
)
//可以看到就是根據$config['components']['errorhandler']來配置
$this->set('errorhandler', $config['components']['errorhandler']); //使用此定位器註冊元件定義。 檔案此方法源於他的父類的繼承 -》
module -》servicelocator
unset($config['components']['errorhandler']);//通過php函式註冊error handler(具體參考下面的yii\base\errorhandler::register())
$this->geterrorhandler()->register();
} }
//'components' =>[
'errorhandler' =>[ 'erroraction' => 'site/error',],
],
//geterrorhandler 方法會呼叫祖先類servicelocator中的get方法
public function geterrorhandler()//get方法會例項化乙個errorhandler物件並返回
public function get($id, $throwexception = true)
if (isset($this->_definitions[$id]))
return $this->_components[$id] = yii::createobject($definition);
} elseif ($throwexception)
return null;
}
//yii\base\errorhandler::register()
public
function
register()
else
if ($this->memoryreservesize > 0)
////當出現fatal error的時候由yii\base\errorhandler::handlefatalerror()處理
register_shutdown_function([$this, 'handlefatalerror']);
} 乙個值得注意的地方:在handleexception()、handleerror()、handlefatalerror()中會直接或間接呼叫yii\web\errorhandle::renderexception(),
而在這個函式裡面,有以下這一行**
component::__construct($config) vendor\yiisoft\yii2\base\object.php檔案中
public
function __construct($config =)
//$this->init();}//
yii::configure($object, $properties)分析
//注意:這裡會觸發一些魔術方法,間接呼叫了:
//yii\di\servicelocator::setcomponents()(這個值得注意,詳細參考本文後續「1-3-1分析」)
//yii\base\module::setmodules()
public
static
function configure($object, $properties
)
return
$object;}
public
function
init()
protected
function
bootstrap()
react hooks原始碼第一天useState
import react from react import reactdom from react dom let hooksindex 0 const hooksstate const usestate initialvalue return hooksstate hooksindex setf...
YII框架學習 第一天
yii這個框架聽比爾說很不錯,寫的很優雅,於是乎,就好奇進入官網進行學習下,大yii框架。首先把自己的php環境配置到最低5.4,因為yii裡面用的全是簡化的陣列形式,這種簡化陣列形式,只有到5.4才支援 我用的5.3於是又重新配置了一套,使用php5.6,apaphe2.4.沒有的可以使用我整理好...
YII2 原始碼閱讀 綜述
如何閱讀原始碼呢?我的方法是,開啟xdebug的auto trace xdebug xdebug.profiler enable 1 xdebug.profiler enable trigger 0 xdebug.auto trace on xdebug.collect vars on xdebug...