2

私は PHP5 にかなり慣れていますが、PHP4 同期スクリプトを作成する必要があります。現在、PHP5 と 4 の違いを見つけるために掘り下げています。この問題は foreach.. を使用している場合にのみ発生します。

例を明確にするには:

function doSomething()
{
    $aMyAr = array();
    $oUser = new User();

    addUser($aMyAr, $oUser);
}

function addUser($aDestArray, $oUser)
{
    $aMyAr[] = $oUser;
}

このスクリプトを自分で実行して、出力を echo/print_r してみませんか?いくつかの理由で、PHP4 は最新の WAMP/XAMPP では動作しません (そうです、互換性があると言われている Apache バージョンを大量に試してみました...)

4

1 に答える 1

3

変更点は、PHP4 ではオブジェクトがデフォルトでコピーされ、PHP5 ではデフォルトで参照として扱われることだけです。すなわち:

$a = new stdClass();
$a->prop = "original";
$b = $a;

$b->prop = "changed";
echo $a->prop;

# PHP4 outputs "original" because $a and $b are different objects
# PHP5 outputs "changed" because $a and $b are the same object

関数呼び出しを行うか foreach を使用する場合、PHP4 では、オブジェクトは参照渡しではなくコピーされます。

PHP4 の関数の引数を PHP5 のように動作させるには、関数の引数を参照渡しで明示的に渡す必要があります。

function someFunc(& $someObject) {
  $someObject->prop = "changed";
}

someFunc($a);
echo $a->prop; # prints "changed"

そのため、PHP4 のオブジェクト指向コードはあちこちに散らばってしまいます&(当時は真の OO コードを作成していましたが、これは非常に面倒でした!)。

別の例は、参照による割り当てです。PHP5$b =& $aで単純なオブジェクトが行うことを、PHP4 のオブジェクトで行います。$b = $a

最後に、参照による戻りがあります。関数内でオブジェクトを作成し、(コピーを返すのではなく) それを返したい場合は、関数を で定義する必要があり&ますfunction &someFunc() {}

繰り返しますが、PHP ドキュメントで構文が説明されています。最善の方法は、PHP4 を使用しないことです。

于 2011-05-31T21:02:44.410 に答える