staticメンバの意外な一面

以下のようなクラスがあるとき。

スタティックなメンバー$valueの値をクラス外から参照したいときには、以下のようにしますよね。

実行結果は当然のごとく

しかし、このクラスを指定する際に、クラス名が変数に入っていても大丈夫だと言うのです。
そんなことがありうるのでしょうか!
リフレクションなどではなく、名前が文字列で入っているだけなのに!

実行結果はこちら。

できました。
できるのです。
便利だ。便利なのか。
いやどうだろう。
しかしこれだけ見ても、いやー便利だなーとは全然ならないわけで。

クラス名を変数に入れていてそこから静的メンバーを参照したり呼び出したりするメリットはどこにあるでしょうか。
インスタンス化するよりもメモリや実行速度のコストは良さそうな気がします。

でも、その変数がクラス名が入った文字列変数なのか、クラスオブジェクトが入っているインスタンス変数なのかを迷うぐらいであれば、インスタンス化で候補を統一して選挙を戦った方が圧倒的に有利で当選確実な気がします。

何かのフレームワークなどで巨大なクラスが複雑に絡み合うような時には何か活躍の場が見出せるのかもしれません。

ちなみにあんまり関係ありませんが、最初の頃はクラスメンバーを変更できなくしようとして、

としてしまい、何がダメかをサクっと検索してみてgoogleの検索結果一覧だけを見て

とやって、またダメだったのはがっくりきました。

phpの final は、「このメソッドはオーバーライドできませんよ」という意味だったのです。
しかも、変数には使えないのです。

上記の間違ったコードでの意図は、「変更できないスタティックなメンバー変数」だったのですが、それを満たしてくれるphpのキーワードにはまだ出会っていません。

楽天市場

Amazon.co.jpアソシエイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)