Özellikle, bir başka daha etkilidir?
Arasındaki iki fark leat vardır forward_static_call_array
and call_user_func_array
a>:
Bundan sonra, PHP 5.3 ile tanıtıldı bağlama Geç Statik ile alakalı biraz fark olduğunu varsayalım.
Actually, if you take a closer look at the given example, it seems to be exactly that : the "context" of the class inside which you are using forward_static_call_array
is "kept", in the called method.
Bu kod bölümü göz önüne alındığında, bu örnekte de elde edilen var:
class A {
const NAME = 'A';
public static function test() {
$args = func_get_args();
echo static::NAME, " ".join(',', $args)." \n"; // Will echo B
}
}
class B extends A {
const NAME = 'B';
public static function test() {
echo self::NAME, "\n"; // B
forward_static_call_array(array('A', 'test'), array('more', 'args'));
}
}
B::test('foo');
Bu çıktıyı alırsınız:
B
B more,args
A sınıfı yöntemi, yani sen "B gelen" olduğunuzu, static::
anahtar kelime aracılığıyla, "bilmek".
Now, if you try to do the the same thing with call_user_func
:
class B extends A {
const NAME = 'B';
public static function test() {
echo self::NAME, "\n"; // B
call_user_func_array(array('A', 'test'), array('more', 'args'));
}
}
(the rest of the code doesn't change)
Bu çıktıyı alırsınız:
B
A more,args
A ikinci satırda Not! forward_static_call_array
, bir A alamadım, ama bir B. Ile
İşte fark bu: forward_static_call_array
denir yöntemi statik bağlamı iletir, call_user_func_array
yok iken.
About your efficiency question : I have no idea -- you'd have to benchmark ; but that's really not the point : the point is that those two functions don't do the same thing.