Heim > Backend-Entwicklung > PHP-Tutorial > Analyse des Implementierungsprinzips der PHP-Objektkettenoperation

Analyse des Implementierungsprinzips der PHP-Objektkettenoperation

高洛峰
Freigeben: 2023-03-03 17:48:01
Original
1174 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt das Implementierungsprinzip der PHP-Objektkettenoperation. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

Was ist eine Kettenoperation? Schüler, die jQuery verwenden, sollten sehr beeindruckt sein. In jQuery arbeiten wir häufig mit DOM-Elementen wie folgt:

$("p").css("color").addClass("selected");
Nach dem Login kopieren

Der kontinuierliche Betrieb sieht wirklich cool aus und ist auch zum Lesen von Code sehr praktisch. Kann er also in PHP implementiert werden? Die Antwort lautet: Ja, natürlich muss es in OOP verwendet werden. In prozeduralen Programmen besteht keine Notwendigkeit, diese Methode zu verwenden.

In PHP verwenden wir oft viele Funktionen:

$str = 'abs123 ';
echo strlen(trim($str));
Nach dem Login kopieren

Die Funktion des obigen Codes besteht darin, die Leerzeichen auf beiden Seiten zu entfernen Geben Sie dann seine Länge aus, dann können Sie die Kettenprogrammierung wie folgt verwenden:

$str = 'abs123 ';
echo $str->trim()->strlen();
Nach dem Login kopieren

__call() und __toString() magische Methoden in PHP objektorientiert

class BaseChainObject{
    /**
* 追溯数据,用来进行调试
* @var array
*/
private $_trace_data = array();
    /**
    *    保存可用方法列表
    *    @param array
    */
    protected $_methods = array();
    /**
    *    处理的数据
    *    @param null
    */
    public $data;
    function __construct($data){
        $this->data = $data;
        $this->_trace_data['__construct'] = $data;
        return $this->data;
    }
    function __toString(){
        return (String)$this->data;
    }
    function __call($name,$args){
        try{
            $this->vaild_func($name);
        }catch(Exception $e){
            echo $e->getMessage();
            exit();
        }
        if (!$args) {
            $args = $this->data;
            $this->data = call_user_func($name,$args);
        }else{
            $this->data = call_user_func_array($name,$args);
        }
        $this->_trace_data[$name] = $this->data;
        return $this;
    }
    /**
    *    判断方法是否存在
    *    @param string
    */
    private function vaild_func($fn){
        if(!in_array($fn, $this->_methods)){
            throw new Exception("unvaild method");
        }
    }
    public function trace(){
      var_dump($this->_trace_data);
    }
}
class String extends BaseChainObject{
    protected $_methods = array('trim','strlen');
}
$str = new String('ab rewqc ');
echo $str->trim()->strlen();
$str->trace();
Nach dem Login kopieren

Wie aus dem obigen Code ersichtlich ist, wird die magische Methode __call() automatisch ausgelöst, wenn das aufrufende Objekt nicht vorhanden ist, und dann zur Ausführung mit call_user_func() kombiniert Wenn das Objekt ausgegeben wird, wird toString() ausgelöst, um das gewünschte Ergebnis auszugeben. Eine andere Lösung besteht natürlich darin, dies in der Methode zu verwenden, um Objektkettenoperationen zu erreichen.

Ich hoffe, dass dieser Artikel für alle, die sich mit PHP-Programmierung befassen, hilfreich sein wird.

Weitere Artikel zur Analyse des Implementierungsprinzips der PHP-Objektkettenoperation finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage