Yii2原始碼分析第一天

2022-06-25 06:54:08 字數 2757 閱讀 6050

入口檔案 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) 方法

public

static

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...