2015-11-01 39 views
5

Bazı örnek php betiklerinin birbiri ardına bir işlevi kullanabildiğini gördüm, ama nasıl betik yazacağımı bulamıyorum.Bu tür bir php işlevi nasıl tanımlanır?

Ben php script yazarken:

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

ben işlevini banana çağırmak istediğinizde şuna benzer:

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

Ne Birazdan önceki sonraki bir işlev aramak istiyorsanız böyle biri:

$ Apple> muz() -> turuncu()

Başka bir işlevin içine bir işlev koymaya çalıştım ancak hatayla döndü. Betiği böyle nasıl yazabilirim?

+4

Olası yinelenen [PHP yöntemi zincirleme?] (Http://stackoverflow.com/questions/3724112/php-method-chaining) –

cevap

6

,

<?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

$ mValues ​​anlamı nedir? – timo

+0

@timo '$ mValues', tanımlanmamış yönteme iletilen bir dizi argümandır. –

+0

@timo 'Avocado (' one ',' two ') yöntemine argümanları iletirseniz, bu argümanlar '$ mValues' dizisinde saklanır. –

4

Böyle bir şey yapabiliriz: Bu böyle bir şey kısa yoludur

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

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

: Sonunda

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

$, elma ve $ still_the_same_apple oluşturduğunuz aynı örneği vardır ilk yer. Bu kod yöntem zincirleme geliştirmektir

+0

neler var $ apple = yeni elma ve '' $ apple = new apple() arasındaki fark; '? – timo

+0

Kurucu argümanlarını tedarik etmek istemiyorsanız fark yoktur. Bu konuda bir tartışma var: http://stackoverflow.com/questions/3873111/instantiate-a-class-with-or-without-parentheses – MikeWu

İlgili konular