WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [PHP]privateのメソッドが外から呼べる

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

PHPの話題というよりオブジェクト言語全般にいえる話題だと思います。下のコードを見てください。


abstract class Super
{
private $_list = array();

private function hoge()
{
echo 'hoge';
}

public function addChild($child)
{
$this->_list[] = $child;
}

public function exec()
{
foreach($this->_list as $child)
{
$child->hoge();
}
}
}

class Child extends Super
{

}

$child = new Child();
$child->addChild(new Child());
$child->addChild(new Child());

$child->exec();
Super::execの中で保持したインスタンスに対してprivateのメソッドを呼び出しています。

私はこれは呼び出せないと思ってました。自分の親クラスのメソッドではありますが、インスタンスに対して呼び出してるのでprivateのメソッドは呼べないはずだと。そもそもprivateだぞ・・・

privateは$thisに対してのみ呼び出せるのだと思ってました。

PHPのバグか!と思ったのですがJavaで試しても呼び出せました。同僚にc++とdelphiでも試してもらったけどコンパイル通ったそうです。つまり、これは一般的なことみたいですね。
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。