我遇到了一个小问题,但似乎找不到任何关于如何修复的文档,或者它是否可能。这是我正在尝试做的一些示例代码。
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设置为静态,但由于它接受的值不是静态的,我认为这不起作用。
答案 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);
}
}