2014-02-12 131 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