php有反射机制吗,php里的反射机制

你错误了理解了异常处理机制.php早期版本根本就没有异常处理机制.异常的出现是跟反射同时出现的.之前的代码都是用错误处理函数来抛出错误等级.由错误处理函数接收之后加以分析处理.代码采用的更多是流水线式的结构.后来为了完善对于oo思想编程的实现,不断加入了异常机制,完善了接口,克隆,反射,以及多态特性.总之,php里用多态有点不伦不类,接口还马马虎虎.克隆在新的底层实现下就变的必不可少.由于对oo思想的跟进,后来有不断出现了命名空间.这个重要是为了实现闭包特性,延迟绑定.类的访问权限控制以及继承权限的控制.说多了.总之很多特性都是为了实现对oo思想的支持.其实没有oo,利用早期版本提供的特性一样可以写出符合需求的代码.

zf2

echo1/0;

试试,能不能捕获回复@leo108:求写法...回复@liet:可以,set_exception_handler可以不用try,catch就throw一个异常么?兄台throw 专门抛出异常的, 没有被捕获和能不能抛出异常是两码事.我看框架里代码没有try,catch直接if判断了下就thrownew一个异常,我直接throw他就报错

兄台啊,别偷换概念。

框架里抛出的异常不用try..catch,直接就可以throw

说得好像异常要try..catch才能throw抛的一样。。抛是抛,捕获是捕获,两码子事干嘛扯到一起?本来就不应该在一起,我完全可以在A页面抛,B页面捕获。要是try..catch..throw在一起那才叫扯淡呢,那就是脱裤子放屁了。

异常抛出了就必须要捕获,但不是说异常抛出了就必须马上去捕获。好比吃完饭必须要拉屎(不拉难道全部消化?从皮肤排出来?),但不是说吃完饭就必须马上去拉屎,我可以稍后去。

core/lib/db/mysqli.class.php抛异常publicfunctionconnect($config){$this->dbLink=mysqli_init();$this->dbLink->real_connect($config['host'],$config['login'],$config['password'],$config['database'],$config['port']?intval($config['port']):3306,'',MYSQLI_CLIENT_FOUND_ROWS);if(mysqli_connect_errno()){thrownewBaseException("数据库连接失败",1001);}if($config['charset']){$this->dbLink->query("SETNAMES'{$config['charset']}'");}return$this->dbLink;}

/hi/index.php框架总入口,捕获异常 publicfunctionrun(){try{$this->route();$this->Controll();}catch(BaseException$e){$e->errorMessage();}}比喻很形象啊

try..catch是不受用户控制的系统异常时后自动抛出,throw想抛就抛即使程序没有异常,都可以用set_exception_handler指定的函数处理,这样可以更好的处理程序的未知问题;;

比如说某个核心参数变量的值只能为‘a或者b,但是不知道什么原因变成c了这时候程序不能处理必须提前终止程序try就无能为力了。这时候代码可能没有任何问题,但是从逻辑上来说会出现不可控因素一般就手动throw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值