0

データベースからhcard形式にデータを印刷しようとしています。

...
<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. 2 番目の「print_row」関数呼び出しが、最初の「print_row」関数呼び出し内にないのはなぜですか?
  2. これも不可能ですか?( PHP - 関数の引数として関数名を渡すことはできますか? )
4

2 に答える 2

4

ほとんどの場合、関数呼び出しreturnの代わりに使用します。echo

なんで?returnデータを返し、保存とエコーの両方を可能にするためです。echoブラウザにレンダリングするだけです。

基本機能returnの例は. を実行するか、2 番目のパラメータが TRUE の場合に実行します。echoprint_r()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.'>';
}

既存の場所に応じて関数をエコーし​​ます。
または、次returnの代わりに4 番目のパラメーターを追加しechoます。

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 ')'
于 2012-05-15T13:37:41.210 に答える
2

値ではなく、関数から値を返す必要がありますecho

于 2012-05-15T13:37:10.013 に答える