前言
前几天看源码的时候,发现一个源码使用的一种让函数自动调用数组中的各种参数用法,很是让我感兴趣,具体是哪个函数,我好像记错了,记成了func_get_args()
但是很不幸这个函数是返回这个函数中所有参数的意思。类似的函数有func_get_arg() 以及func_num_args() ,意思返回一个参数,以及返回参数个数。
后来经过“艰苦”查询(笑),得到了一个大致答案。那就是一种代码书写技巧,即委托模式。所以现在我也试着开始慢慢学着文档撸一段代码,来简单实现下php的委托模式。
写在前面
我们先说明一下什么叫做委托模式,这个有很多称呼,我就不一一说明了,这个简单讲就是有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。(这不就是字面意义吗,啊喂,摔!) 。那么如何使用php实现委托模式呢?答案就是利用反射来实现。
关于反射机制
反射机制是php5之后才有的新功能(所以基本都有,笑),主要作用是导出或提取出关于类、方法、属性、参数等的详细信息,包括注释(这个牛批了)。具体使用方法,各位看客可以参考下php手册中的用法
https://www.php.net/manual/zh/class.reflectionclass.php
下面写一个demo来演示一下这个反射机制的使用方法
//首先创建一个试验类,这个类里面基本所有属性都有了
class A
{
public $one = 'haha';
protect $two = 'ahaha';
private $test="asdasda";
public function __construct()
{
echo 123;
}
protect function echoOne()
{
echo $this->one."\n";
}
privatefunction echoTwo()
{
echo $this->two."\n";
}
}
//紧接着就需要php中的强大的反射机制了
//这是获得类似结果集。。
$reflector = new ReflectionClass('A');
//获取所有属性,与getDefaultProperties有区别,类似ASSOC和ROW(笑)
$properties = $reflector->getProperties();
//获取所有方法
$func= $reflector->getMethods();
$t1 = $reflector->getDefaultProperties();
var_dump($t1);
var_dump($func);
var_dump($properties);
下面是输出的结果
关于反射机制我们就先说到这里,因为时间有点晚,剩下我明天再开始(笑),身体最重要。
关于这个函数,今天找到了是call_user_func_array() 昨天太晚了,没有总结,哎嘿