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即可实现,开发自己的框架也可以采用。
前公司吃饭是需要在钉钉报餐的,对于不挑剔的我每天都在公司吃饭,有时忘记报餐导致吃不了饭还是很麻烦的。看了下报餐系统需要的是json数据包含我的工号即可。于是编写如下代码,放在360网址监控,1小时执行1次<?php /*自动报餐类*/ class AutoBaocan{...
通过经纬度转换为城市名称,并获得城市的编号,通常在全国类型的商城中比较通用。//经纬度转城市名称(返回城市id,城市名称) //$ak开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$lng)...
array_merge是最常用的数组合并方法,+号同样也可以,但是却有很大不同。array_merge遇到相同字符串key,后面数组的key会覆盖前面数组的key,+号正好相反。$a = [ 'one' => 'A on...
逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event { /** &nbs...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
php7新增的特性(1).强制限制只能返回一种类型<?php class task { } //must return an integer function add(): int { &nb...