2012-05-15 220 views
0

我試圖打印數據從數據庫到hcard格式內部參數:調用PHP函數的函數調用

... 
<span class='n'> 
<span class="given-name">John</span> 
... 
</span> 

然後,我創造了這個PHP函數:

function print_row ($html_tag, $type, $value) { 
    echo '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>'; 
} 

// Calling function 
print_row('span', 'given_name', 'John'); 

// Output 
<span class="given_name">Nathan</span> 

這工作正如我所料,直到我試圖將我的print_row函數作爲print_row函數的參數調用。

print_row('span', 'n', print_row('span', 'given_name', 'Nathan')); 

// Output 
<span class="given_name">Nathan</span> 
<span class="n"></span> 

// Wanted Output 
<span class="n"><span class="given_name">Nathan</span></span> 
  1. 爲什麼是我第二次 'print_row' 函數調用不是我first'print_row」函數調用裏面?
  2. 這是不可能的嗎? (PHP - Can I pass a function name as a function argument?
+0

你應該考慮一個模板系統,使這個輕鬆許多:http://www.webresourcesdepot.com/19-promising-php-模板引擎/ –

回答

4

差不多總是在函數調用中使用return而不是echo

爲什麼?因爲return返回數據並讓您存儲和回顯它。 echo只是呈現給瀏覽器。

基本returnecho函數的示例是print_r()。如果第二個參數爲TRUE,它可以執行echoreturn


你應該改變

function print_row ($html_tag, $type, $value) { 
    echo '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>'; 
} 

function print_row ($html_tag, $type, $value) { 
    return '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>'; 
} 

,並相應地呼應了功能上現有的地方。
這或添加第四參數的echoreturn代替:

function print_row ($html_tag, $type, $value, $bool = FALSE) { 
    $str = '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>'; 
    if ($bool) 
     return $str; 
    else echo $str; 
} 

print_row('span', 'n', print_row('span', 'given_name', 'Nathan', TRUE)); 
// Added a ', TRUE' at the second last ')' 
2

你必須從函數返回值,而不是echo它。