1

私は完全に奇妙なバグで数日間苦労してきました:これがシナリオです(我慢してください):

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 はクラスを解析し、エラーについて不平を言いました!

4

1 に答える 1

1

PHP バージョン >= 5.3.0 を使用している場合は、次のようにすることができます。

<?php
class F {
    protected static $_tabela = 'a';

    final public static function _Tabela() {
        $s = new static();
        return $s::$_tabela;
    }
    public static function Consultar() {
        $s = new static();
        echo $s::_Tabela();
    }
}

class P extends F {
    protected static $_tabela = 'produtos';
}

echo P::Consultar(); // echos 'produtos'
于 2012-12-28T15:54:19.453 に答える