PHP classにメンバ定義が無いのに代入できても嬉しくない場合が多いと思われる。



class foo {
  public $item_num;
}

$instance = new foo()
$instance->item_num = 10;

ありがちなプログラムの一節である。

class foo {
  public $item_num;
}

$instance = new foo()
$instance->num = 10;

これもままある。しかも動いてしまう。

厳密には、「処理を続行」する。そしてitem_numを期待してる箇所で空っぽであることにようやく発覚する。
stdclassなら判るものだが、class宣言したのだから代入制限してほしい。せめてwarningは欲しい。

OOPっぽいものを実装してはみたけど、感覚が「連想配列」のままなんだろうなあ、と忖度しないでもない。

class foo {
  public $item_num;
  protected $num;
}

$instance = new foo()
$instance->num = 10;

こうすればエラーは吐くようにはなる。が、num1への代入等は防げない。

マジックメソッドを使って、自前で判定を作ってる人は居た。
PHPのプロパティをStrictに定義する - Hack Your Design!