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