[PHP-users 31289] 演算子 :: は static ? (was Re: オーバーライドでのメソッドの拡張方法)

goungoun gounx2 @ gmail.com
2007年 1月 19日 (金) 15:19:00 JST


こんにちは。

On Fri, 19 Jan 2007 09:47:48 +0900
Shindo <shindo @ atsystem.jp> wrote:
> 
> >どのあたりでしょうか。
> http://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php
> ここに
> 「二つの特別なキーワードselfとparent  がクラス定義の内部からメンバまたは
> メソッドにアクセスする際に使用されます。」
> と書かれていて
> (例19−13)で、「return self::$my_static;」
> と、ststic変数を参照しています。なので、メソッドにも適用されるのかなと考
> えたのですが。

言語仕様としてはそういうことだと理解してますので、
個人的な経験談として書きます。

# あまり深追いしたくはないので。

私も

『:: はstaticなメソッド、メンバへアクセスする演算子』

と覚えていて

『あれれ?』

と思ったことはあります。

例えば、

クラスの基礎
http://www.php.net/manual/ja/language.oop5.basic.php

の 例 19-1 の A::foo() の挙動に着目すると
foo()は何者?と不思議な感じを受けました。

ちょっと話が変わりますが・・・

クラスを継承してメソッドをオーバーライドしたときに、
隠れてしまう親メソッドをあえてCallしたいとき

----------------------
class xxx extend yyy
{
  function hoge()
  {
     parent::hoge();
  }
}
----------------------

と書きますが、個人的には

----------------------
class xxx extend yyy
{
  function hoge()
  {
     parent->hoge();
  }
}
----------------------

の方が頭にスッと入ってきます。

#『:: はstaticなメソッド、メンバへアクセスする演算子』
# として覚えたいという欲求からなのですけどね。

# などと言い出すと、
# parent::hoge() という書き方は、
# 「parent」というキーワードと「::」は馴染まないんじゃないか?
# staticなメソッドなのだったら、
# ClassA::hoge() などとより明示的に書いたほうがいいんじゃないか?
# とかいろいろ疑問が沸いてきて切りがないんですが。


-- 
goungoun <gounx2 @ gmail.com>
http://goungoun.dip.jp/app/



PHP-users メーリングリストの案内