1

我有以下设置:

<?php
class core {
    static $var1;
}

class parent extends core {
   function getStatic() {
       return parent::$var1;
   }
}

class child extends parent {
    function getStatic() {
        // I want to access core static var, how can i do it?
        //return parent::$var1;
   }
}
?>

我需要能够使用 parent::$var1 但来自类子级..这可能吗?我错过了什么吗?

4

3 回答 3

4

只需将其引用为 self... PHP 将自动沿继承链上升,直到找到匹配项

class core {
    protected static $var1 = 'foo';
}
class foo extends core {
    public static function getStatic() {
        return self::$var1;
    }
}
class bar extends foo {
    public static function getStatic() {
        return self::$var1;
    }
}

现在,如果您不在 bar 中声明 getStatic,将会出现问题。举个例子:

class foo1 extends core {
    protected static $var1 = 'bar';
    public static function getStatic() {
        return self::$var1;
    }
}
class bar1 extends foo1 {
    protected static $var1 = 'baz';
}

现在,您希望foo1::getStatic()返回bar(而且它会返回)。但是会Bar1::getStatic()返回什么?它也会回来bar。这称为后期静态绑定。如果您希望它返回baz,则需要使用static::$var1而不是self::$var1(仅限 PHP 5.3+)...

于 2010-08-02T23:52:21.833 回答
2

core::$var1 似乎最适合您的需求......

于 2010-08-02T21:51:27.540 回答
1

这里最大的问题是您使用关键字 parent 作为类名。这使得您对 parent::$var1 的调用是否旨在指向该类或调用类的父级变得完全模棱两可。

我相信,如果你清理它,你可以实现你想要的。例如,此代码打印“某物”。

class core {
    static $var1 = 'something';
}

class foo extends core {
   function getStatic() {
       return parent::$var1;
   }
}

class bar extends foo {
    function getStatic() {
        // I want to access core static var, how can i do it?
        return parent::$var1;
   }
}

$b = new bar ();
echo $b->getStatic ();

如果您使用core::而不是parent::. 但是,如果您在类中也声明了一个静态 $var1 ,那么这两者的行为foo有所不同。因为它是一个单一的、继承的变量。

于 2010-08-02T21:37:47.207 回答