Artık kullanılmayan call_user_method için önerilen yedek?

4 Cevap php

4 Cevap

Dediğin gibi call_user_func kolayca bu işlevin davranışını çoğaltabilirsiniz. Sorun ne?

call_user_method sayfasında bile alternatif olarak listeler:

<?php
call_user_func(array($obj, $method_name), $parameter /* , ... */);
call_user_func(array(&$obj, $method_name), $parameter /* , ... */); // PHP 4
?>

Bildiğim kadarıyla olarak why Bu bırakıldığından, this posting explains it:

This is because the call_user_method() and call_user_method_array() functions can easily be duplicated by:

old way:
call_user_method($func, $obj, "method", "args", "go", "here");

new way:
call_user_func(array(&$obj, "method"), "method", "args", "go", "here");

Şahsen, ben muhtemelen Chad tarafından yayınlanmıştır değişken değişkenler öneri ile gitmek istiyorum.

Sen variable variables kullanarak yapabileceğini, bu benim için temiz görünüyor. Yerine:

call_user_func(array($obj, $method_name), $parameter);

Yapmanız:

$obj->{$method_name}($parameter);

Böyle bir şey yapmak:

Benim __ yapı () yöntemi, bu gibi bir şey kullanabilirsiniz.

$params = array('a','b','c'); // PUT YOUR PARAMS IN $params DYNAMICALLY

call_user_func_array(array($this, $this->_request), array($params));

1st argument : Obect instance, 2nd argument : method to call, 3rd argument : params

: Sizinle çok eğer yöntem veya Sınıf sınamak önce

method_exists()
class_exists()

Şerefe

if you get following error: Warning: call_user_func() expects parameter 1 to be a valid callback, second array member is not a valid method in C:\www\file.php on line X and code like this:

call_user_func(array($this, $method));

$ yöntem adını (dize) bildirimi kullanmak

call_user_func(array($this, (string)$method));