我需要在子类的方法中调用函数中传递父类变量。
请看代码!
class CsBuilder {
protected static $mysqli = 0;
private function connect() {
// make connection
$mysqli = new mysqli(data);
self::$mysqli = $mysqli;
}
public function initialise() {
$this->connect();
// other stuff
}
}
class App extends CsBuilder {
public function test() {
// parent::$mysqli is accessable here!
function innerFuntion() {
$query = 'some query';
// parent::$mysqli->query($query);
// how to access parent::$mysqli here?
}
innerFuntion();
}
}
$builder = new CsBuilder();
$builder->initialise();
$app = new App();
$app->test();
我遇到了错误:
PHP Fatal error: Class 'parent' not found...
有什么想法吗?
由于
答案 0 :(得分:2)
您正在尝试使用其范围之外的变量。查看PHP手册中的第二个示例:http://php.net/manual/en/language.variables.scope.php
以下是固定代码,请在线试用:http://sandbox.onlinephpfunctions.com/code/80ce967c0b499ce026fbc5d92209c9b8c8cd6323
这是一个改变:
public function test() {
// parent::$mysqli is accessable here!
function innerFuntion($db) {
var_dump($db);
};
innerFuntion(parent::$mysqli); // pass it to the function
}
通过这种方式,您将确保您的函数类似宏,将用于循环
public function test() {
// parent::$mysqli is accessable here!
$db = parent::$mysqli
$innerFuntion = function () use ($db) {
var_dump($db);
};
$innerFuntion();
}
将innerFuntion
提取到私有方法中,这样就不会弄乱对象的公共API,但会共享对象的封装状态,并且可以直接在test
方法中使用。
class App extends CsBuilder {
public function test() {
$this->innerFuntion('a', 'b');
}
private function innerFuntion(arg1, arg2) {
$query = 'some query';
parent::$mysqli->query($query);
}
}