2014-02-12 76 views
1

我有一個包含了很多的「返回」功能類:PHP返回字符串沒有「回聲」?

Class Components_superclass 
{ 
    public function build() 
    { 
     $this->add_category('Grille'); 
    } 

    public function add_category($name) 
    { 
     return '<div class="category">'. $name .'</div>'; 
    } 
    ... 
} 

我想包含「add_category」功能的HTML代碼。但是當我回應這個時,我什麼都沒有:

$component = new Components_superclass(); 
echo $component->build(); 

我必須在構建函數中添加「return」嗎?有沒有辦法避免這種情況?因爲我有很多功能可以撥打,我不想寫這樣的內容:

public function build() 
{ 
    return 
     $this->function_1() . 
     $this->function_2() . 
     $this->function_3(); 
} 

謝謝!

+0

很多人(通常是新手程序員)傾向於認爲編程語言有這些神奇的功能,建立正確的呃,他們沒有。編程是編程,這意味着你必須做編程部分。 – Mark

回答

2

是的,echo不起作用,因爲沒有任何東西從構建返回 - 沒有字符串傳遞到可以打印的回聲。

關於你的第二個問題,你可以從內部緩衝字符串,然後返回它一次,像這樣:

Class Components_superclass 
{ 
    private $buffer = array(); 

    // … 

    public function add_category($name) 
    { 
     $this->buffer[] = '<div class="category">'. $name .'</div>'; 
    } 

    public function output() 
    { 
     return implode('', $this->buffer); 
    } 
} 
+0

非常好的主意!我沒有想到那種最有意義的方式。我是一個noob!謝謝。 –

+0

最好只在緩衝區中存儲'$ name',而不使用HTML(爲什麼要使用額外的內存?)。然後在輸出時附加HTML。 – Mark

0

如果您想要函數返回一個值(可以是字符串,整數或其他類型),請使用return。如果您調用該函數,則返回的值在該位置可用。

如果function_1()返回字符串'我是函數1',並且您回顯函數調用(echo $this->function_1();),字符串'我是函數1'將被回顯。

這也是使用函數的正確方法。如果你想從函數內部回顯事物,只需在函數中回顯。

結帳PHP.net's function documentation

+0

是的,但我想操縱字符串「ouputed」。如果我在課堂上回應他們,那麼我不能把他們放在一個變量中。 –

+0

正確,那就是你永遠不應該在函數中迴應某些東西。你van'收集'flush函數中的所有字符串並將其返回到你的界面並在那裏回顯? – Ruben