PHP函数和变量继承


PHP function and variable inheritance

有人能帮我理解PHP类中的变量/函数继承吗?

我的父类有一个所有子类都使用的函数。然而,每个子类都需要在这个函数中使用它自己的变量。我想静态地调用子类中的函数。在下面的示例中,将显示"world",而不是子类中的值。

有人能解释一下如何让函数在子类中回送值吗?我应该使用接口吗?这与后期静态绑定有关吗(由于使用了5.3.0之前版本的PHP,所以我无法使用它)?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class myParent
{
    static $myVar = 'world';
    static function hello()
    {
        echo self::$myVar;  
    }
}

class myFirstChild extends myParent
{
    static $myVar = 'earth';
}

class mySecondChild extends myParent
{
    static $myVar = 'planet';
}

myFirstChild::hello();
mySecondChild::hello();


是的,你不能这样做。static $myVar的声明不会以任何方式相互作用,正是因为它们是静态的,是的,如果你有5.3.0,你可以绕过它,但是你没有,所以你不能。

我的建议是只使用一个非静态变量和方法。


你可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class myParent
{
    var $myVar ="world";
    function hello()
    {
        echo $this->myVar."
"
;      
    }
}

class myFirstChild extends myParent
{
    var $myVar ="earth";
}

class mySecondChild extends myParent
{
    var $myVar ="planet";
}

$first = new myFirstChild();
$first->hello();

$second = new mySecondChild();
$second->hello();

此代码打印

1
2
earth
planet


I want to call the function in the
child classes statically.

这真的会让你陷入麻烦,让你在一天结束前发疯(可能已经有了)。

我坚决建议使用尽可能少的"static属性/方法,特别是如果您尝试使用继承,至少使用php<5.3

而且,由于php 5.3是一个全新的版本,它可能在几个月前就不能在您的主机服务上使用了…


如果您使用的是php 5.3,那么这个echo语句可以工作:

1
echo static::$myVar;

但是,由于您不能使用它,所以您唯一的(好的)选择是使hello()函数不是静态的。