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

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面向对象核心(一)——序列化与魔术方法

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区