06/11/07 00:09:09
URLリンク(mixi.jp)
global使ってる?
私がglobalをことのほか忌避する理由の大本は大体このあたりです。
で、ついでに書きますと。私は、直下でモノ(class)を作らせるとき。例え内部であろうともすべて必ず「アクセッサ経由」でのみ、変数のアタッチを許可しています(アクセッサそのものは変数を直接触りますが)。
これら(globalはNGとアクセッサを必ず使う)は、
・ミスをさせない
というよりも、もうちょっと未も蓋もなく
・ミスが発生したときに「せめて補足できるように」するため
です。
平たい話。globalな変数に「ついうっかり別所でおかしな設定をした」場合、探し出すのに苦労します。
アクセッサを使ってるのであれば、とりあえずそのおかしな情報のセッターにデバッグプリント1行ぶち込むだけで、ある程度状況が分析できます(少なくとも「変な値を入れられている」事くらいは判明するし、大体の場所も簡単に補足可能)。
このあたりの差異は小さくないと思うのですが。
特に、private修飾子などのない、PHP4においてこの発想が顕著でした。PHP5ですと、ある程度、縛りもできるのですが。
「故に」。
問題が発生したときに「面倒」なので。且つ「使わないことによる明らかなデメリット」が、現状知っているかぎりでは「ない」ので。
何らかの「明示されるデメリット」がないかぎり、私はglobalは「NG」だ、と思ってます。
これを読まれている方の何かの参考にでもなれば幸いです。