首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP面向对象核心(三)——反射、异常处理

PHP面向对象核心(三)——反射、异常处理

作者头像
用户1327360
发布2018-03-07 10:07:08
6560
发布2018-03-07 10:07:08
举报
文章被收录于专栏:决胜机器学习决胜机器学习

PHP面向对象核心(三)

(原创内容,转载请注明来源,谢谢)

五、反射

1、反射即PHP运行过程中,提取出关于类、方法、属性、参数等信息,包括 注释信息。动态获取信息以及动态调用对象方法的功能称为反射API。

2、反射的实现

方法一:采用ReflectionObject类

采用此方法,可以获取到private定义的属性和方法。

示例:

运行结果:

源码:

<?php
class TestReflect{
         public$name;
         private$id;
         publicfunction __construct($name = 'a', $id = 1){
                   $this->name= $name;
                   $this->id= $id;
         }
         privatefunction testFunction(){
                   echo$name.'&'.$id;
         }
         publicfunction testFunction2(){
                   echo$id.'&'.$name;
         }
}
$obj = new TestReflect();
$reflect = new ReflectionObject($obj);
echo '属性:<br />';
$arrProps = $reflect->getProperties();
foreach($arrProps as $item){
         echo$item->getName().'<br />';
}
echo '<br />方法:<br/>';
$arrFuncs = $reflect->getMethods();
foreach($arrFuncs as $item){
         echo$item->getName().'<br />';
}

方法二:采用PHP自带函数

get_class($obj)//返回类名
get_object_vars($obj)//返回对象属性关联数组
get_class_vars(get_class($obj))//返回类属性
get_class_methods(get_class($obj))//返回类的方法

采用方法二,无法从类的外部获取private的属性和方法,需要从类内部定义一个方法去输出这些内容。

3、通过反射,可以还原类的属性和方法,并可在上述foreach中通过isPrivate()、isPublic()、isProtected()、isStatic()等判断类的访问权限。因此,反射可以还原整个类。

4、运用

反射通常用于调试对象,但是消耗太大,善于运用反射可以保证代码的简洁,但是ReflectionObject类可以还原整个类,也破坏了类的封装性。

六、异常与错误处理

1、PHP只有手动抛出异常才能捕获异常,当程序运行中遇到的异常都会报错误。

2、异常的运用

a.对于无法遇见的代码执行结果

b.用于对业务的关注:例如一个方法需要执行将文件上传,并把文件上传路径和文件名存入数据库。这两部缺一不可,否则单个操作没有意义。这种情况下,就可以使用异常,当执行完一步,另一步执行失败时,做出相应的回滚。

c.保证代码的健壮性

3、PHP的错误表示脚本运行不正常。

常见的有deprecated、notice、warning、fetal error、prase等。上述几个优先级呈递增状态。

因此,代码报warning不代表警告,而是报警告级别的错误,也是一种报错。

4、在方法前加入error_reporting(0),可以屏蔽所有的报错,项目部署上线时常用此方法,避免报错导致的数据库等关键信息泄露。

——written by linhxx 2017.06.20

相关阅读:

PHP面向对象核心(二)——继承、多态、接口

PHP面向对象核心(一)——序列化与魔术方法

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档