phpでクラスを継承したら嵌った話。
$this->fooとself::$fooがこんなに違うものだとは思わなかった。まぁ、別物だから書き方が変わるんでしょうが。
理解している人には当たり前のことなのだろうけれど、理解する前に使い始める自分のような者にはドツボになりかねない。(実際になってたし……)
ってことで、嵌ったことを書いておきます。(昨晩、長いこと悩んでいました)
多分に間違いが混在していると思いますが、構いません。
ここ、読んでる人いないし……。(^_^;;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php class foo { function func1 () { echo self::func2(); } function func2 () { return "foo"; } } class bar extends foo { function func2 () { return "bar"; } } $a = new bar(); $a->func1(); ?> |
これの結果が、”foo”。
“bar”となることを期待していたので、最初は何が起こったか見当もつきませんでした。
func1の中のself::func2を$this->func2に書き換えると、期待通りの”bar”となりました。
self::は、定義したそのクラス内で動作するようです。
継承先(上書きしたもの)を参照させる時には、$this->で指示しないといけないらしい。
しかし、何から何までとはいかないようで、class bar内でclass fooのみで定義した変数を$this->で参照しようとするとエラーになります。
使い分けが必要なようですねぇ。(絶対に混在から間違いを混入している>自分のソース)
マニュアル読み直さないといけないなぁ。
因みに、私のソースはglobal使いまくり、class内と、グローバル関数の整理がついていなくて、同様の関数が両方にあったりする。MVCって何?ってなスパゲッティ状態です。
キャメルケース、アンダースコア区切りも混在しているし……(途中からキャメルケースに変えたので)
でも、動いているからイイ!(^_^;;;;

