3

間違っていたら教えてください。しかし、これは PHP のバグであると確信しています。

<?php

class One {

    public static $var = 'hi';
}

class Two extends One {

    public static function set($var) {
        static::$var = $var;
    }
}

Two::set('bye');

var_dump(One::$var);
// bye

そのスクリプトは、「こんにちは」を出力する必要があると確信しているときに、「さようなら」を出力します。どう思いますか?

サブクラスでこれを再宣言したくありません。

4

2 に答える 2

1

OPが質問を編集しました。これは、プロパティを再宣言したくないと言う前の答えでした

Two共有$varしているからOneです。

このように書くと、目的の出力が得られます

class One {

    public static $var = 'hi';
}

class Two extends One {

    public static $var = 'hi';

    public static function set($var) {
        static::$var = $var;
    }
}

Two::set('bye');

// you get hi
var_dump(One::$var);
// you get bye
var_dump(Two::$var);
于 2013-03-02T13:18:21.057 に答える
0

それは不可能だと思いますが、単純に再宣言したくない場合は、コンストラクターで定義してください..

class One {

    public static $var = 'hi';
}

class Two extends One {

    public static $var;

    public function __construct(){
        self::$var = parent::$var;
    }

    public static function set($var) {
        self::$var = $var;
    }
}

Two::set('bye');

var_dump(One::$var);
var_dump(Two::$var);
于 2013-03-02T14:27:28.467 に答える