0

拡張クラスから変数を取得しようとしています。これが私のメインクラスの外観です。

class SS {
    public $NONE = NULL;
    public $NUMBERS = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
    public $OPERATORS = array("=", "&&", ">", "<", "+", "-", "/", "*", "^");
    public $DBLQUOTES = '"$1"';
    public $SNGQUOTES = "'$1'";
    public $CODE;

    function SuperSyn($sCode, $cLang) {         
        $hLang = new VB6;
        $VB6 = $hLang->__construct();
        echo $VB6->ssAuthor;
    }
}

そして、私の拡張クラスは次のようになります(キーワードの多くを削除しました)。

class VB6 extends SS {
    public function __construct() {
        $ssAuthor = "James Brooks";
        $ssCSS = "languages/vb6.css";
        $ssNumbers = $NUMBERS;
        $ssKeywords = array("Abs", "Access", "AddItem");
        $ssReserved = $NONE;
        $ssComments = "('.+)";
        $ssOperators = $OPERATORS;
        $ssDoubleQuote = $NONE;
        $ssSingleQuote = $NONE;
    }
}

呼び出されているパブリック関数__constructを削除すると、PHPは関数を期待していると愚痴をこぼします。

私の質問は、拡張クラスからメインクラスに変数を取得するにはどうすればよいですか?

4

4 に答える 4

1

phpの親キーワードを使用します。

PHPの親

于 2009-09-01T10:09:18.207 に答える
1

オブジェクトを作成するとコンストラクターが呼び出されるので、これは機能するはずです。

function SuperSyn($sCode, $cLang) {                     
     $hLang = new VB6(); //I think you need some parameters here
     echo $VhLang->ssAuthor;
}

ただし、VB6コンストラクターでは、現在ローカル変数のみを割り当てているため、外部からssAuthorにアクセスすることはできません。代わりに、おそらく次のようなことをしたいと思うでしょう。

class VB6 extends SS {
    public $ssAuthor;

    public function __construct() {
        $this->ssAuthor = "James Brooks";
        //etc.
    }
}
于 2009-09-01T10:12:03.613 に答える
0

あなたの期待には論理的な問題があると思います。クラスSSの関数が、VB6サブクラスにのみ存在する変数について知っている必要があるのはなぜですか?

これはクリーンな継承動作ではなく、クラスの問題を明らかにします。

それを解決するための2つの選択肢:

  • 変数をメインクラスに入れて、そのクラスの関数で使用します
  • サブクラスの変数を使用して関数をサブクラス内に配置します

(親キーワードと「$ this」変数に関するコメントを読んだ後:質問の理解が異なり、反対の方向が必要なため、どちらも役に立たないと思います:親クラス関数>サブクラス変数、サブクラス関数ではありません>親クラス変数)

于 2009-09-01T10:11:38.000 に答える
0

parent::またはを使用します$this->(依存します。つまり、同じ名前の2つの変数があります)

于 2009-09-01T10:13:01.180 に答える