前段时间做两个机能,须要静态初始化一大批选定表达式,那些表达式还原属相同的类。须要初始化的类和方式存有两个三维字符串中:
$needDo = array(
{
className=>xxx,
methodName=>xxx
},
……
);
所以各method 的模块都为空,依照那个情形只好我想不到了calluserfuncarray 那个表达式。
那个表达式能静态的初始化某一类中的某一方式,因此能传达任两个模块,对现阶段那个情景可以说是极为的适宜了。
上面具体内容说说那个表达式的用语。
得出的表述是这种的:
calluserfuncarray :初始化反弹表达式,并把两个字符串模块做为反弹表达式的模块。
表明:mixed calluserfuncarray ( callable $callback , array $paramarr )
把第二个模块做为反弹表达式(callback)初始化,把模块字符串做(paramarr)为反弹表达式的的模块传至。
回到反弹表达式的结论。假如手忙脚乱不然就回到FALSE
比如初始化的方式不存有或者类不存有都会回到 FALSE
使用方式主要有以下两种:
一、类内表达式的初始化
首先呢,那个表达式能支持反弹类内的方式,那个时候该表达式的第二个模块就不必是字符串了,直接把要初始化的类内方式的签名放到第二个模块的位置就能,第二个模块依照实际情形将之顺序放入到字符串中即可。
如:
class a { public function b ($c){return $c;} calluserfuncarray(b, array($e))}
二、初始化其他类的方式
那个情形会比较复杂,那个时候呢该表达式的第二个模块的类名能是两个对象,也能是两个未经初始化的类。方式呢能支持静态方式和非静态方式。
1、无需实例化初始化类的静态方式
calluserfuncarray(array(className,staticMethodName), array(param1));
2、不实例化初始化类的非静态方式
calluserfuncarray(array(className,methodName), array(param1));
这种方式使用须要谨慎一点,因为这种使用不然类是没有实例化的,假如初始化的方式中有$this语句,会报错,因为$this 指向的是现阶段类的两个实例,没有实例化,$this 就是两个空指针,空指针引用是会fatal 的,所以那个方式的使用须要当心一点。
3、初始化实例化后的类的非静态方式
$obj = new ClassName();
calluserfuncarray(array($obj,methodName), array(param1));
该表达式的第二个模块假如是对象不然,支持传达对象的指针。
calluserfuncarray(array(&$obj,methodName), array(param1));
拓展:
与该表达式特别相似的两个表达式是 calluserfunc。
该方式的表述如下:
calluserfunc(callable $callback, mixed $parameter =?, mixed $…= ?): mixed
第二个模块 callback 是被初始化的反弹表达式,其余模块是反弹表达式的模块。
模块 callback
将被初始化的反弹表达式(callable)。
模块 parameter
0个或以上的模块,被传至反弹表达式。
注意:
请注意,传至calluserfunc()的模块不能为引用传达。