php 关闭call stack,Thinkphp Call Stack,PHP调用栈Call Stack的获取
ThinkPHP中有一個(gè)debug調(diào)試功能,能輸出報(bào)錯(cuò)文件的信息,并能看到這個(gè)函數(shù)被哪些函數(shù)調(diào)用,從框架的啟動(dòng)開(kāi)始記錄,特別方便調(diào)試。于是研究了下它的底層給予了實(shí)現(xiàn)。<?php
//--框架核心--Start
//框架內(nèi)置錯(cuò)誤處理
function?errDealWith($errno,?$errstr,?$errfile,?$errline)
{
throw?new?Exception('錯(cuò)誤信息:'?.?$errstr?.?'錯(cuò)誤文件:'?.?$errfile?.?'錯(cuò)誤行:'?.?$errline?.?'錯(cuò)誤碼:'?.?$errno);
}
set_error_handler('errDealWith');
//加載框架
try
{
init();
}
catch?(Exception?$e)
{
showDebug($e);
//showDebug($e->getMessage());
}
//框架調(diào)用棧方法
function?showDebug($ex)
{
//錯(cuò)誤輸出
var_dump($ex->getMessage());
//調(diào)用棧輸出
var_dump('調(diào)用順序');
$traces?=?array_reverse($ex->getTrace());
foreach?($traces?as?$item)
{
//剔除框架自帶的異常函數(shù)
if?($item['function']?!=?'errDealWith')
{
var_dump($item['function']);
var_dump($item);
}
}
}
//框架初始化方法
function?init()
{
//加載index控制器
index();
}
//--框架核心--結(jié)束
//-----------------------華麗的分割線
//控制器
function?index()
{
//加載新聞的邏輯
getList();
}
//新聞頁(yè)面
function?getList()
{
return?$list;
}
在上面的代碼中存在$list未定義的錯(cuò)誤。首先要自定義錯(cuò)誤處理函數(shù)或類(lèi),這里為了演示只是處理了一種錯(cuò)誤而已,實(shí)際上一個(gè)完整的錯(cuò)誤處理類(lèi)是非常龐大的,通過(guò)拋出異常再獲取getTrace即可實(shí)現(xiàn),開(kāi)發(fā)自己的框架也可以采用。
總結(jié)
以上是生活随笔為你收集整理的php 关闭call stack,Thinkphp Call Stack,PHP调用栈Call Stack的获取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android源码下载
- 下一篇: IIS6配置和PHP5.6环境安装