从其父级访问重载函数中的变量

时间:2011-02-22 00:31:24

标签: php oop

我遇到了一个小问题,但似乎找不到任何关于如何修复的文档,或者它是否可能。这是我正在尝试做的一些示例代码。

class Foo {
public function A ($dynamicValues) {
$var = array($dynamicValues);
}
}

class MyClass extends Foo {
public function A {
var_dump($var);
}
}

正如您所看到的,我正在尝试访问$ var数组中父类的函数A中声明的值,该函数包含传递给它的动态数组。但是,我无法找到一种方法,因为var_dump将$ var作为空数组返回。我发现最接近实现目标的是将父类中的$ var设置为静态,但由于它接受的值不是静态的,我认为这不起作用。

2 个答案:

答案 0 :(得分:2)

您尝试“访问”的变量未在您的范围内定义。

整个函数都被重载了。函数内部的变量属于这个函数,如果不处理全局变量,则不可用。

你应该像这样定义一个类变量:

class Foo {
    protected $var = "hello";
}

class MyClass extends Foo {
    public function A {
        var_dump($this->var); // will output hello
    }
}

答案 1 :(得分:1)

我不确切地知道你想要实现什么,但根据上下文你可以使用以下任何一种方法:

如果您不想知道Foo:A()如何计算$ var而$ var是函数返回的内容,您可以从重写方法MyClass:A调用它( )像这样

class Foo {
    public function A($dynamicValues) {
        return array($dynamicValues);
    }
}

class MyClass extends Foo {
    public function A($dynamicValues) {
        $vars = parent::A($dynamicValues);
        var_dump($vars);
    }
}

如果A()返回的内容不是$ var,你可以从Foo :: A()中提取一个方法来计算$ var,如下所示:

class Foo {
    public function A($dynamicValues) {
        $var = $this->_getVar($dynamicValues);
    }

    protected function _getVar($dynamicValues) {
        return array($dynamicValues);
    }
}

class MyClass extends Foo {
    public function A($dynamicValues) {
        $var = $this->_getVar($dynamicValues);
        var_dump($var);
    }
}