2014-02-12 4 views
1

У меня есть класс, содержащий много «возврат» функции:PHP возвращаемая строка без "эха"?

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

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

Я хочу, чтобы получить HTML-код, содержащий в функции «add_category». Но когда я повторяю это, у меня ничего нет:

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

Должен ли я добавить функцию «возврат» в функции сборки? Есть ли способ избежать этого? Поскольку у меня есть много функций, чтобы позвонить, и я не хочу писать что-то вроде этого:

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() возвращает строку 'I am function one', и вы эхо вызове функции (echo $this->function_1();), будет отображаться строка 'I am function one'.

Это также правильный способ работы с функциями. Если вы хотите эхо-функцию изнутри функции, просто эхо в функции.

Отъезд PHP.net's function documentation!

+0

Да, но я хочу манипулировать строками «ouputed». Если я повторю их в своем классе, то я не могу поместить их в переменную. –

+0

Правильно, таким образом, вы никогда не должны эхать что-то в funcion. Вы van 'собираете' все строки в функции флеша и возвращаете его в свой интерфейс и эхом там? – Ruben

Смежные вопросы