PHP5のクラス(メンバ変数へのアクセス)

PHP5のクラスについてはまともに使ったこともなければ勉強したこともなかった。
Zend Frameworkを使い始めて強制的に使うことになった。
C++, Delphi, Javaでクラスをというかオブジェクト指向言語になじみはあるのでとくに困ることはなく、フレームワークによってHTML埋め込みがないため他の言語のソースとそう大きく変わることもなく扱えた。
しかし、違いは確実にある。
昨日はまったのはメソッドへのクラス内部でのアクセス。他の言語では私の記憶の限り、クラスのメソッドをクラス内で使う限りはメソッド名だけでコールできたはずなのであるが、PHP5では、
$this->methodName();
としなければならない。
今日、はまったのが、メンバ変数、プロパティとも言うがこれへのアクセス。
宣言は他の言語と大きく変わらない。クラス宣言の先頭でメソッド定義の前にほぼ定位置と言っていい位置で宣言する。他の言語とか割らない。
protected $property;
と宣言しておいた。問題はこれに値を代入したり、この値を出力するとき。文法書がないから、適当に考えて、
$this->$property;
とアクセスしたらエラーになった。ネットでサンプルコードになりそうなページをあさり、解答がみつかった。
$this->property;
とアクセスするのが正解だった。こんなのは文法書を一冊読めば基本なのかもしれないが、あまりに他の言語と違うな、と思った。といっても、Java, C++, Delphiには変数の先頭に$をつける仕様はないし、変数には厳密な型もある。比べてはいけないのだ。
それにしても、わかりにくい仕様だな。
エラーログからも想像もつかない解法だった。

コメント