Heim >Backend-Entwicklung >PHP-Tutorial >Drei Möglichkeiten, Kettenoperationen in PHP zu implementieren
Es gibt viele String-Funktionen in PHP. Sie müssen beispielsweise zuerst die Leerzeichen am Ende des Strings filtern und dann seine Länge ermitteln:
strlen(trim($str))
If Sie möchten eine ähnliche Kette wie in js implementieren. Wie soll ich beispielsweise Folgendes schreiben?
$str->trim()->strlen()
Es gibt drei Möglichkeiten, es umzusetzen:
__call
in Kombination mit call_user_func
, um zu implementieren Idee: Definieren Sie zuerst eine String-Klasse StringHelper
, der Konstruktor weist den Wert direkt zu, ruft dann die Funktionen trim()
und strlen()
in einer Kette auf und verarbeitet die aufrufende Beziehung mithilfe von __call()
in der aufgerufenen magischen Funktion call_user_func
, die Implementierung ist wie folgt:
<?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ $this->value = call_user_func($function, $this->value, $args[0]); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen();
Terminal-Ausführungsskript:
php test.php 8
__call
kombiniert mit call_user_func_array
, um <?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ array_unshift($args, $this->value); $this->value = call_user_func_array($function, $args); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen();Beschreibung: Die Funktion
array_unshift(array,value1,value2,value3...)
wird verwendet, um neue Elemente in das Array einzufügen. Die Werte des neuen Arrays werden am Anfang des Arrays eingefügt. array_unshift()
und call_user_func()
sind beide Methoden zum dynamischen Aufrufen von Funktionen. Der Unterschied liegt in der Art und Weise, wie Parameter übergeben werden. call_user_func_array
__call
ohne Verwendung der magischen Funktion in die Funktion _call()
: trim()
public function trim($t) { $this->value = trim($this->value, $t); return $this; }Der entscheidende Punkt ist: Gibt den Zeiger $this zurück, um den Aufruf der letztgenannten Funktion zu erleichtern.
strlen(trim($str))Wenn Sie beispielsweise eine Kettenoperation ähnlich der in js implementieren möchten, wie sollten Sie sie wie folgt schreiben?
$str->trim()->strlen()Es gibt drei Möglichkeiten, es umzusetzen: Methode 1. Verwenden Sie die magische Funktion
__call
, um call_user_func
zu implementieren Idee: Definieren Sie zuerst eine String-Klasse , der Konstruktor weist den Wert direkt zu, ruft dann die Funktionen StringHelper
und trim()
in einer Kette auf und verarbeitet die aufrufende Beziehung mithilfe von strlen()
in der aufgerufenen magischen Funktion __call()
, die Implementierung ist wie folgt: call_user_func
<?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ $this->value = call_user_func($function, $this->value, $args[0]); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen();Terminal-Ausführungsskript:
php test.php 8Methode 2. Verwenden Sie die magische Funktion
__call
, um call_user_func_array
<?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ array_unshift($args, $this->value); $this->value = call_user_func_array($function, $args); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen();
array_unshift(array,value1,value2,value3...)wird verwendet, um neue Elemente in das Array einzufügen. Die Werte des neuen Arrays werden am Anfang des Arrays eingefügt.
array_unshift()
sind beide Methoden zum dynamischen Aufrufen von Funktionen. Der Unterschied liegt in der Art und Weise, wie Parameter übergeben werden. call_user_func()
call_user_func_array
Methode 3: Um
__call
zu implementieren, ändern Sie einfach : _call()
trim()
public function trim($t) { $this->value = trim($this->value, $t); return $this; }
Weitere PHP-Drei-Methoden zur Implementierung von Kettenoperationen finden Sie auf der chinesischen PHP-Website für verwandte Artikel!