2015-11-01 9 views
5

Ho visto alcuni esempi di script php che possono utilizzare una funzione una dopo l'altra, ma non riesco a trovare il modo di scrivere uno script del genere.Come definire questo tipo di funzione PHP?

Quando scrivo lo script php:

class apple { 
    function banana() { 
    echo 'Hi!'; 
    } 
} 

Ecco come si presenta quando voglio chiamare la funzione banana:

$apple = new apple; 
$apple->banana(); 

Cosa succede se voglio chiamare una funzione subito dopo il precedente uno, come questo:

$ mela-> banana() -> arancione()

Ho provato a inserire una funzione in un altro, ma restituisce con errore. Come posso scrivere lo script in questo modo?

+4

Possibile duplicato del [metodo PHP concatenamento?] (Http://stackoverflow.com/questions/3724112/php-method-chaining) –

risposta

6

Questo codice è quello di migliorare il metodo di concatenamento,

<?php 

    class Fruits 
    { 
     public function banana() 
     { 
      echo 'Hi i am banana!'.'<br>'; 
      return $this; 
     } 

     public function orange() 
     { 
      echo 'Hi i am orange!'.'<br>'; 
      return $this; 
     } 

     public function __call($mName,$mValues) 
     { 
      echo 'Hi i am '.$mName.'!'.'<br>'; 
      return $this; 
     } 
    } 

    $fruits = new Fruits(); 
    $fruits->banana()->orange()->grape()->avocado(); 
+0

Che cosa significa "$ mValues"? – timo

+0

@timo '$ mValues' è un array di argomenti passati al metodo non definito. –

+0

@timo se si passano gli argomenti al metodo 'avocado ('uno', 'due')' tali argomenti saranno memorizzati nella matrice '$ mValues'. –

4

si può fare qualcosa di simile:

class apple { 
    public function banana() { 
    echo 'Hi!'; 
    return $this; 
    } 
    public function orange() { 
     echo 'Hi from orange'; 
     return $this; 
    } 
} 

$apple = new apple; 
$apple->banana()->orange(); 

Questa è una scorciatoia per qualcosa di simile:

$apple = new apple; 
$same_apple = $apple->banana(); 
// $apple and $same_apple are the same thing here. 
$still_the_same_apple = $same_apple->orange(); 

Alla fine, $ mela e $ still_the_same_apple sono la stessa istanza si è creato in il primo posto.

+0

Qual è la cosa differenza di '$ mela = nuova mela;' e '$ mela = nuova mela();'? – timo

+0

Non vi è alcuna differenza se non si desidera fornire argomenti del costruttore. C'è una discussione su questo qui: http://stackoverflow.com/questions/3873111/instantiate-a-class-with-or-without-parentheses – MikeWu