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();
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; }
strlen(trim($str))
$str->trim()->strlen()
__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();
php test.php 8
__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...)
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!