まず最初に、この質問がここで2回以上出回っていることを知っています。
しかし、すべてのE_NOTICEを修正すればするほど(人々が言うように)、次のことに気づきます。
- 私はマイクロ最適化しています
- 私は実際にもっと多くのコードを作成していて、コードを維持するのが難しく、遅くなっています
例を見てみましょう:
MongoDB PHPドライバーを使用していて、データベース内のコレクション内の単一の行を表すクラス内で名前がMongoDate
付けられたクラス変数内のオブジェクトがあるとします。ts
ここで、次のようにこの変数にアクセスします。ただし、この特定の行にはフィールドがない$obj->ts->sec
ため、この場合はオブジェクト自体として定義されていないため、PHPは近似(E_NOTICE)をスローします。したがって、これは問題ないと思います。これは望ましい動作です。returnnullが設定されていない場合は、インタプリタ自身のロボット動作の外で自分で処理します(varがまたはである場合にのみ戻る関数でこれをラップするため) )。ts
ts
date()
1970
null
none-object
しかし、今度は、別の開発者としてそのE_NOTICEを修正することは、E_NOTICEを持っていることはひどいことであり、エラーに応じてそれを行わないようにコードを遅くするので、私に本当に望んでいます。$obj
そこで、というクラスで新しい関数を作成し、getTs
それに3行を与えます。文字通り、ts
varがMongoDate
オブジェクトであるかどうかを確認し、オブジェクトである場合はそれを返します。
なぜ?PHPは、アプリ自体のランタイム内で実行するよりもはるかに高速なインタープリター内でこれを完全にうまく実行できませんか?つまり、コードに役に立たないバンプを追加する必要があるすべての場所で、実際に処理する変数を検出するためのほとんど空の関数を、PHP独自の機能で返したり、本当に必要なときにnull
チェックしたりすることができます(操作に不可欠な場合上記の関数の動作)そして、私が約300行追加instanceof
したsを始めないでください、それは手に負えなくなっています。もちろん、あなたができないので、私はこの関数を作らなければなりません:isset()
isset()
getTs
class obj{
public $ts = new MongoDate();
}
ts
内に格納するか__constructor
(どちらもあまり満足していません。そのまま多くの魔法を使用しています)、関数を使用して設定されているかどうかを検出する必要があります(これは現在行っています)。
つまり、修正する必要がある理由を理解しています。
- 未定義の変数
- 未設定の変数(
null
vars)のプロパティの割り当て - 一定のエラーなど
しかし、コードをテストし、それが安全であり、希望する方法でのみ機能することがわかっている場合、すべてのエラーundefined index
またはnone-object
エラーを修正するポイントは何ですか?たくさんのisset()
sと2行の関数をコードに追加することは、実際にはマイクロ最適化ではありませんか?
サイトの半分をE_NOTICEに準拠させた後、実際にはより多くのCPU、メモリ、および時間を使用していることに気付きました...エラーであるエラーだけでなく、すべてのE_NOTICEエラーに対処するポイントは本当に何ですか?
あなたの考えをありがとう、