2017-02-19 2 views
-1

In meiner Klasse Helper() Ich habe 2 Methoden, die wie folgt aussehen:Aufruf mulltiple Methoden der gleichen Klasse

public function is_active_page($page) { 
    $url = explode("/",$_SERVER["REQUEST_URI"]); 
    if (end($url) === $page) { 
     return true; 
    } 
} 

public function go_to_dashboard() { 
    if (isset($_SESSION['login'])) { 
     header('Location: http://example.com'); 
    } 
} 

Ich würde sie jetzt wie gerne diese nennen: $helper->is_active_page('page')->go_to_dashboard(); statt 2 Zeilen für jede Methode zu verwenden.

Aus irgendeinem Grund funktioniert das nicht für mich. Warum?

+2

das ist falsch Idee, 'is_active_page()' Methode sollte 'boolean' Ergebnis entsprechend seiner Semantik zurückgeben – RomanPerekhrest

Antwort

1

Um Methoden verketten zu können, müssen diese Methoden die ursprüngliche Helper-Instanz zurückgeben. Versuchen Sie, $this aus den Methoden zurückzugeben. Wie RomanPerekrest kommentierte jedoch, ich denke nicht, dass die Methoden, die Sie hier aufgelistet haben, für die Verkettung geeignet sind. Sie wären besser dran, wenn Sie Ihrer Klasse eine weitere Methode hinzufügen würden, die die beiden, die Sie hier angegeben haben, kombiniert.

Ich bin mir nicht ganz sicher, was Sie versuchen zu tun, sondern etwas entlang der Linien von unten könnte sein, was Sie suchen:

public function redirect($page){ 
    if($this->is_active_page($page)){ 
     $this->go_to_dashboard(); 
    } 
} 

Schließlich könnte man darüber nachdenken, den Umfang Ihrer Reduzierung is_active_page und go_to_dashboard Funktionen, wenn sie nicht mehr von außerhalb der Helper Klasse aufgerufen werden müssen.

Verwandte Themen