0

私は OOP にはかなり慣れていませんが、クラスがあり、作成された各オブジェクトを配列にプッシュしています (クラス内のすべてのオブジェクトを反復処理する方法はないと思います)。私のクライアントはまだ PHP4 を使用しているため、問題が発生していました。

バージョン 4 には __construct メソッドが付属していないため、独自に作成しました。

function construct() {
    global $LIST;
    array_push($LIST, &$this);
}

&beforeがなければ、$this空のオブジェクトを配列に追加するだけです。これは、インスタンス化された後、各オブジェクトのいくつかのプロパティを変更するためです。ただし、今では警告が表示されます。

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of array_push(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.

警告を抑制しようとしましたが、@ の前にはarray_push()機能しません。どうやらerror_reporting(0)ルートファイルにない限り動作しないようです (これらはすべて、非常に多くのページのインクルード内にあります)。php.ini ファイルにもアクセスできません。

4

1 に答える 1

1

とにかく&$this値でオブジェクトを渡しているというエラーメッセージが表示されているため、それが機能するだけだとは信じがたいです。$this

さらに、globalクラス宣言で?悪い。恐ろしい。代わりに次のことをしないのはなぜですか?

$LIST[] = new MyObject();

また、PHP4 が古すぎて$arr[]構文がまだ有効でない場合は、次のようになります。

array_push($LIST, new MyObject());

また、聖なる神。PHP4? アップグレードしてください。真剣に。この時点でまだ PHP4 を使用している正当な理由を思いつくことはできないと思います。

于 2013-10-28T20:18:32.547 に答える