Locked History Actions

Diff for "php/SaneTips"

Differences between revisions 1 and 2
Deletions are marked like this. Additions are marked like this.
Line 36: Line 36:

もちろん、このようなことをすると実行速度は遅くなると思われるが、少なくとも開発環境では上述の定義を行っておき、
本番環境ではこれらのメソッドを削除するような工夫をすればよい。

PHPプログラムを少しでもまともにするためのTIPS

以下は基本的にPHP 5.3以上が対象。

未定義のメンバ変数へのアクセスを検出する

ひどいことに、PHPのオブジェクトは未定義のメンバ変数に平気でアクセスできてしまう。 このデタラメな言語仕様により、スペルミスをしてもそれになかなか気がつかないということが起こりうる。

class Sample {
 public $a;
}
$sample = new Sample();
$sample->b = 123;
print $sample->b;

以下のようなクラスを作成しておき、すべてのクラスをこのサブクラスとすることにより、未定義のメンバ変数へのアクセスをチェックすることができる。

class StrictCheckClass {
  public function __get($name) {
    assert(property_exists($this, $name));
  }
  public function __set($name, $val) {
    assert(property_exists($this, $name));
  }  
}

class Sample extends StrictCheckClass {
  public $a;
}

もちろん、このようなことをすると実行速度は遅くなると思われるが、少なくとも開発環境では上述の定義を行っておき、 本番環境ではこれらのメソッドを削除するような工夫をすればよい。