私は完全に奇妙なバグで数日間苦労してきました:これがシナリオです(我慢してください):
F と呼ぶ「フレームワーク」クラスが 1 つあります。F を拡張するいくつかの単純なクラスがあり、そのうちの 1 つを P と呼びます。
だから私が持っているものは次のとおりです。
class F {
[...]
protected static $_tabela;
[...]
final public static function _Tabela() {
return static::$_tabela;
}
public static function Consultar() {
echo static::_Tabela();
}
}
class P extends F {
protected static $_tabela = 'produtos';
}
そして、私が電話すると、私にP::Consultar();
は意味のないこのエラーが表示されます:
Fatal error: Undefined class constant 'self::STRING' in [...]/F.inc.php on line X
X は _Tabela() メソッドの本体です。
ということで、変数名($_tabela)を変えてみました。get_called_class() でクラス名を保存してみました:
$class = get_called_class()
return $class::$_tabela;
しかし、同じエラーが発生しました。
また、エラーメッセージはまったく役に立ちません。クラス定数にアクセスしようとしているのではなく、クラスの静的プロパティにアクセスしようとしています!
エラーメッセージをグーグルで検索しても、有用な結果は得られませんでした。
編集:答えてくれてありがとう!私は問題を発見しましたが、それは私が見ていたコードとは何の関係もありませんでした。P クラスの定義にエラーがあったことが判明したため、static::Consultar を呼び出そうとすると、PHP はクラスを解析し、エラーについて不平を言いました!