参照渡し:
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
出力は次のとおりです。
-test
-
しかし、私がするとき
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
出力は次のとおりです。
-test-
これを参照渡しできないのはなぜですか?
参照渡し:
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
出力は次のとおりです。
-test
-
しかし、私がするとき
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
出力は次のとおりです。
-test-
これを参照渡しできないのはなぜですか?
trim()
参照を期待しないため、渡された文字列を変更しません。参照を渡すことは、関数が参照を期待している場合にのみ意味があります。関数定義に参照引数が含まれているかどうかが問題になるため、参照を渡さないという選択肢はありません。
あなたがやろうとしているのは、呼び出し時の参照渡しは、PHPでは長い間廃止されていることです。それに加えて、廃止されていなくても、実際に引数を変更する関数に対してのみ機能します。
注: 関数呼び出しには参照記号はありません。関数定義のみです。参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 の時点で、 を使用すると、「call-time pass-by-reference」は非推奨であるという警告が表示され
&
ますfoo(&$a);
。
参照を参照してください:
http://php.net/manual/en/function.trim.php
trim()
マニュアルを読むと、文字列の参照ではなく、それ自体の値を期待していることがわかりますstring
。
PHPリファレンスがこれについて何を言っているかを確認しましょう:
注: 関数呼び出しには参照記号はありません。関数定義のみです。参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 以降、「call-time pass-by-reference」は非推奨であるという警告が表示されます...
trim
署名を見てください:
string trim ( string $str [, string $charlist ] )
$str
参照によって渡されることについては何もありません。だから、そうはなりません。関数trim
は入力のみを使用して出力を生成しますが、それを変更することはありません-$str
参照渡しではないため、とにかくできません。