Frage

Seit PHP call_user_method() und call_user_method_array() markierte sind veraltet ich frage mich, welche Alternative zu empfehlen?

Eine Möglichkeit, call_user_func() zu verwenden wäre, denn durch eine Angabe Anordnung mit einem Gegenstand und ein Verfahren Namen als erstes Argument macht das gleiche wie die veralteten Funktionen. Da diese Funktion nicht veraltet markiert ist gehe ich davon aus dem Grund nicht die Nicht-OOP-stylish Nutzung von sich ist?

Die andere Art, wie ich denken kann, ist mit dem Reflection-API , die könnte die bequemste und zukunftsorientierte Alternative. Dennoch ist es mehr Code und ich konnte Bild, dass es langsamer als die oben genannten Funktionen verwendet wird.

Was ich habe Interesse an:

  • Gibt es eine völlig neue Technik für die namentlich die Methoden des Objekts aufrufen?
  • Welches ist der schnellste / besten / Amtlicher Ersatz ist?
  • Was ist der Grund für deprecation?
War es hilfreich?

Lösung

Wie Sie gesagt call_user_func kann leicht das Verhalten dieser Funktion duplizieren. Was ist das Problem?

Die call_user_method Seite selbst listet es als Alternative:

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

Was zu Warum diese veraltet wurde, dieser Eintrag erklärt es:

  

Dies ist   weil die call_user_method() und call_user_method_array() Funktionen   leicht dupliziert werden kann:

     

alte Art und Weise:
  call_user_method($func, $obj, "method", "args", "go", "here");

     

neue Art und Weise:
  call_user_func(array(&$obj, "method"), "method", "args", "go", "here");

Persönlich würde ich wahrscheinlich mit der variablen Variablen Vorschlag gehe von Chad geschrieben.

Andere Tipps

Sie können tun es variable Variablen , sieht dies die sauberste mir. Statt:

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

Sie tun:

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

Sie etwas wie folgt aus:

ich so etwas in meinem __construct () -Methode.

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

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

1. Argument: Obect Instanz, 2. Argument: Methode aufrufen, 3. Argument: params

Bevor Sie können testen, ob Methode oder Klasse auch mit:

method_exists()
class_exists()

Prost

Wenn Sie folgende Fehlermeldung erhalten: Warnung: call_user_func () erwartet 1 Parameter ein gültiger Rückruf zu sein, die zweite Anordnungs-Element ist keine gültige Methode in C: \ www \ file.php auf Linie X und Code wie folgt:

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

Verwendung (string) Erklärung für $ Methodennamen

call_user_func(array($this, (string)$method));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top