前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文 | PHP获取函数参数名,和类定义的常量,都要反射!

3分钟短文 | PHP获取函数参数名,和类定义的常量,都要反射!

作者头像
程序员小助手
发布2020-08-03 20:28:44
1.7K0
发布2020-08-03 20:28:44
举报
文章被收录于专栏:程序员小助手程序员小助手

引言

本文我们分享两个知识点,算是PHP编程中的稍微高阶一点的用法,一般不会用到。可是有了这个思路之后,你对于自己的冗余代码,应该会有想法了。

获取函数形参列表

我们在写程序的时候,不可能所有功能逻辑全堆到一个方法里。总是要考虑设计方式,重用,以及功能拆分。会细分出许多的函数。

那么对于一个声明的函数,类似下面这样:

代码语言:javascript
复制
function test($name, $age) {}

是否有这样的函数,可以直接获取到 test 函数的传参名呢?

代码语言:javascript
复制
get_func_argNames('test');

输出类似于:

代码语言:javascript
复制
Array['name','age']

能做到吗?PHP有这样的现成函数吗?很遗憾,没有!我们需要手动造出来,需要使用一个对象——函数反射 ReflectionFunction。

实现起来代码如下:

该对象提供 getParameters 方法,返回一个形参列表。使用的之后直接用就是:

代码语言:javascript
复制
print_r(get_func_argNames('get_func_argNames'));

输出参数数组:

代码语言:javascript
复制
Array
(
    [0] => funcName
)

注意,上述方法返回的是全局有效的函数的参数列表,而对于类方法,则需要 ReflectionClass 提供支持了。

验证是否正确,我们获取 preg_match 函数的参数列表,输出如下:

代码语言:javascript
复制
array:5 [
  0 => "pattern"
  1 => "subject"
  2 => "subpatterns"
  3 => "flags"
  4 => "offset"
]

结果无误。

类的常量列表

对于一个类,可能源自于多重继承。那么对于该类和继承来的所有常量,我们想要汇总为一个列表,有没有办法?

且父类有可能添加或删除了定义的常量,这个数据是动态的变化的,手动写死只能是死路一条。

还好,PHP 有反射这个高级语言特性的类,专门用于操作对象。

比如有下面的类:

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

本文分享自 程序员小助手 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 获取函数形参列表
  • 类的常量列表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档