1. call_user_func
<span>function</span> a<span>(</span><span>$b</span><span>,</span><span>$c</span><span>)</span><span>{</span> <span>echo</span> <span>$b</span><span>;</span> <span>echo</span> <span>$c</span><span>;</span> <span>}</span> <span>call_user_func</span><span>(</span><span>'a'</span><span>,</span> <span>"111"</span><span>,</span><span>"222"</span><span>)</span><span>;</span> <span>call_user_func</span><span>(</span><span>'a'</span><span>,</span> <span>"333"</span><span>,</span><span>"444"</span><span>)</span><span>;</span> <span>//显示 111 222 333 444</span> <span>?></span> <span>//调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:</span> <span>class</span> a <span>{</span> <span>function</span> b<span>(</span><span>$c</span><span>)</span><span>{</span> <span>echo</span> <span>$c</span><span>;</span> <span>}</span> <span>}</span> <span>call_user_func</span><span>(</span><span>array</span><span>(</span><span>"a"</span><span>,</span> <span>"b"</span><span>)</span><span>,</span><span>"111"</span><span>)</span><span>;</span> <span>//显示 111</span> <span>?></span>
2. call_user_func_array
call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
<span>function</span> a<span>(</span><span>$b</span><span>,</span> <span>$c</span><span>)</span><span>{</span> <span>echo</span> <span>$b</span><span>;</span> <span>echo</span> <span>$c</span><span>;</span> <span>}</span> <span>call_user_func_array</span><span>(</span><span>'a'</span><span>,</span> <span>array</span><span>(</span><span>"111"</span><span>,</span> <span>"222"</span><span>)</span><span>)</span><span>;</span> <span>//显示 111 222</span> <span>?></span> <span>//call_user_func_array函数也可以调用类内部的方法的</span> <span>Class</span> ClassA<span>{</span> <span>function</span> bc<span>(</span><span>$b</span><span>,</span> <span>$c</span><span>)</span> <span>{</span> <span>$bc</span> <span>=</span> <span>$b</span> <span>+</span> <span>$c</span><span>;</span> <span>echo</span> <span>$bc</span><span>;</span> <span>}</span> <span>}</span> <span>call_user_func_array</span><span>(</span><span>array</span><span>(</span><span>'ClassA'</span><span>,</span><span>'bc'</span><span>)</span><span>,</span> <span>array</span><span>(</span><span>"111"</span><span>,</span> <span>"222"</span><span>)</span><span>)</span><span>;</span> <span>//显示 333</span> <span>?></span>
call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
<span>function</span> a<span>(</span><span>&</span><span>$b</span><span>)</span><span>{</span> <span>$b</span><span>++;</span> <span>}</span> <span>$c</span> <span>=</span> <span>0</span><span>;</span> <span>call_user_func</span><span>(</span><span>'a'</span><span>,</span> <span>&</span><span>$c</span><span>)</span><span>;</span> <span>echo</span> <span>$c</span><span>;</span><span>//显示 1</span> <span>call_user_func_array</span><span>(</span><span>'a'</span><span>,</span> <span>array</span><span>(</span><span>&</span><span>$c</span><span>)</span><span>)</span><span>;</span> <span>echo</span> <span>$c</span><span>;</span><span>//显示 2</span>