PHP快速查看类的方法:get_class_methods与反射类实战
新手如何快速涨粉这事儿没人能打包票,但新手想快速掌握PHP查看类的方法?嘿嘿,这个我还真有招!你是不是遇到过这种情况—领导甩给你一坨别人写的代码,你盯着某个类抓破头皮都不知道它有哪些可用方法?今天教的工具,保准你试了能把别人代码「扒光看透」
一、咱先别急着敲代码!
??举个现实例子??:小林拿到一个第三方支付的SDK,发现里面有个叫PaymentProcessor的类。但他连这个类能调send()还是submit()都搞不清楚,更别说还要对接了...
这时候根本不需要硬啃文档!PHP自己就带「透视眼」工具——我今天说的 ??get_class_methods函数?? 和 ??反射类??,你先记住这俩名字。
二、最傻瓜的操作:get_class_methods
这函数名字长得像俄罗斯方块,但用法简单到掉渣。比如有这人类似的代码:
php复制class Dog { public function bark() {} private function eat() {} } $myDog = new Dog(); // 重点来了! print_r(get_class_methods($myDog));
输出会是啥?对,??只显示bark()??!因为它默认不显示私有方法(private)。但老板要你逆向分析别人代码的话,可能就得...
??它的三大缺陷??你得记着:
- ??看不见private/protected方法??,除非你在类内部用
- ??不会显示父类继承的方法??,比如Dog继承自Animal类的方法
- ??返回纯数组没细节??,比如不知道参数有几个
三、想玩高级侦查?反射类安排上
这时候该ReflectionClass出场了——这货能把你家类扒得连裤衩都不剩!看操作:
php复制$ref = new ReflectionClass('Dog'); // 强制看所有方法(包括私有的) $methods = $ref->getMethods(); foreach ($methods as $method) { echo "方法名:".$method->getName()."
"; echo "参数数量:".$method->getNumberOfParameters()."
"; echo "是私有的吗?".$method->isPrivate()."
"; }
跑这段代码的话,连eat()的私有性都能给你揪出来!是不是瞬间觉得手上的烂代码有救了?
四、灵魂拷问:这俩到底怎么选?
呃...我知道有人要纠结了,这俩看着都能用,非得分场合吗?
这么说吧——
场景 | get_class_methods适用度 | 反射类适用度 |
---|---|---|
只想快速看公开方法列表 | ? 推荐 | ?? 没必要 |
要分析方法的参数和权限 | ? 搞不定 | ? 必须上 |
动态调用未知类 | ? 做不到 | ? 配合invoke |
上周有个小伙子问我:为啥他用get_class_methods死活读不到父类的方法?你看,这类问题用反射类的话直接调用$ref->getParentClass()就顺带扫到遗传的方法了。
小编观点
项目赶进度的时候别强迫症,能用get_class_methods快读就别折腾反射。但要真想进阶成代码侦探,反射类的学习成本绝对值回票价——毕竟它能看的不只是方法,连属性、命名空间这些都能扒个底朝天。千万别再人肉读源码了,工具用熟了你就是组里最靓的仔!
本文由嘻道妙招独家原创,未经允许,严禁转载