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 回答