2

参照渡し:

<?php
$str = "test    \n";
trim(&$str);
echo "-" . "$str" . "-";
?>

出力は次のとおりです。

-test
-

しかし、私がするとき

<?php
$str = "test    \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>

出力は次のとおりです。

-test-

これを参照渡しできないのはなぜですか?

4

3 に答える 3

8

trim()参照を期待しないため、渡された文字列を変更しません。参照を渡すことは、関数が参照を期待している場合にのみ意味があります。関数定義に参照引数が含まれているかどうかが問題になるため、参照を渡さないという選択肢はありません。

あなたがやろうとしているのは、呼び出し時の参照渡しは、PHPでは長い間廃止されていることです。それに加えて、廃止されていなくても、実際に引数を変更する関数に対してのみ機能します。

注: 関数呼び出しには参照記号はありません。関数定義のみです。参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 の時点で、 を使用すると、「call-time pass-by-reference」は非推奨であるという警告が表示され&ますfoo(&$a);

于 2012-04-22T10:32:22.810 に答える
1

参照を参照してください:

http://php.net/manual/en/function.trim.php

trim()マニュアルを読むと、文字列の参照ではなく、それ自体の値を期待していることがわかりますstring

于 2012-04-22T10:34:49.127 に答える
1

PHPリファレンスがこれについて何を言っているかを確認しましょう:

注: 関数呼び出しには参照記号はありません。関数定義のみです。参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 以降、「call-time pass-by-reference」は非推奨であるという警告が表示されます...

trim署名を見てください:

string trim ( string $str [, string $charlist ] )

$str参照によって渡されることについては何もありません。だから、そうはなりません。関数trimは入力のみを使用して出力を生成しますが、それを変更することはありません-$str参照渡しではないため、とにかくできません。

于 2012-04-22T10:37:37.643 に答える