ライブ サーバーで E_NOTICE を有効にして使用する必要がありますか?
E_NOTICE エラーを修正する必要があるのはなぜですか? でわかるように
誰もが再びisset()
通知を省略するために使用しています。私はプロを読んだことがありますが、コードの読みやすさはどうですか?
いくつかのコードを調べてみましょう:
if ($this->_oldattributes['category_id'] != $tattr['category_id']
|| $this->_oldattributes['deal_id'] != $tattr['deal_id']
) {
ここで私が何を望んでいるのかを理解するのは明らかですよね?
isset()
通知を省略して追加しましょう:
$old_cat_id = isset($this->_oldattributes['category_id']) ? $this->_oldattributes['category_id'] : null;
$new_cat_id = isset($tattr['category_id']) ? $tattr['category_id'] : null;
$old_deal_id = isset($this->_oldattributes['deal_id']) ? $this->_oldattributes['deal_id'] : null;
$new_deal_id = isset($tattr['deal_id']) ? $tattr['deal_id'] : null;
if ($old_cat_id != $new_cat_id || $old_deal_id != $new_deal_id) {
悪くはありませんが、ここで何が起こっているのかを理解するには、もっと時間が必要です。
デバッグに関するいくつかのビット - 初期化されていない変数が原因で発生したエラーをデバッグするために 1 日を無駄にすることはありませんでした。はい、クラス/関数に滑り込むために30分が無駄になったかもしれませんが、コードの可読性を失うことと比較すると、これは大きな無駄ではありませんか?
パフォーマンスに関するいくつかのビット - http://seanmonstar.com/post/909029460/php-error-suppression-performance
違いは、最初に通知が存在するかどうかをチェックするだけで、通知を抑制するのに 100% かかったということです」 DB接続等に比べて時間はかかりますか?
たぶん、私は正しいコードを書くことに慣れていないだけかもしれません(長い間PHPだけを使用していました)。
コンテキストのために、プロジェクトを E_NOTICE を表示するサーバーに移動しました。そのため、これを求めています。それらをオフにすることがなぜこれが大きな問題なのかわかりませんか?
もう一つの例:
class Item extends CActiveRecord {
private $_oldattributes = array();
public function afterFind()
{
// Save old values
$this->_oldattributes = $this->getAttributes();
$this->_oldcategory = $this->category;
$this->_olddeal = $this->deal;
}
したがって、古い属性が存在しない場合は null になります。
$tattr = $this->getAttributes();
$this->_oldattributes['category_id'] != $tattr['category_id']
これで必要なものが得られ、エラーはありませんよね?
オブジェクト エラーではない場合と同じです。Yii でリレーションを設定したときに、一部のオブジェクトが初期化されていない可能性があります。はい、一種のエラーがあります。この場合、null 値があり、初期化されていないため、実際のエラーになることがあります。
$this->deal->item->id != $this->_olddeal->item->id
これにより通知が表示される場合がありますが、意図したとおりに機能するため、通知を無視します。
if ($_GET['foo']) ...
問題は、これを無視できないことです。これはまだ通知をスローし、これを使用するたびに次のように書く必要があるためです。
if (isset($_GET['foo']) && $_GET['foo']) ...
また:
if (@$_GET['foo']) ...