有人能帮我理解PHP类中的变量/函数继承吗?
我的父类有一个所有子类都使用的函数。然而,每个子类都需要在这个函数中使用它自己的变量。我想静态地调用子类中的函数。在下面的示例中,将显示"world",而不是子类中的值。
有人能解释一下如何让函数在子类中回送值吗?我应该使用接口吗?这与后期静态绑定有关吗(由于使用了5.3.0之前版本的PHP,所以我无法使用它)?
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,你可以绕过它,但是你没有,所以你不能。
我的建议是只使用一个非静态变量和方法。
我决定在孩子们的静态函数中创建一个"self"实例,然后将变量存储为非静态的。
你可以这样做:
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();
号
此代码打印
earth
planet
I want to call the function in the
child classes statically.
号
这真的会让你陷入麻烦,让你在一天结束前发疯(可能已经有了)。
我坚决建议使用尽可能少的"static属性/方法,特别是如果您尝试使用继承,至少使用php<5.3
而且,由于php 5.3是一个全新的版本,它可能在几个月前就不能在您的主机服务上使用了…
如果您使用的是php 5.3,那么这个echo语句可以工作:
echo static::$myVar;
但是,由于您不能使用它,所以您唯一的(好的)选择是使hello()函数不是静态的。