我需要在函数中传递父类变量,这是在子类的方法中调用的。
请看代码!
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...有什么想法吗?
谢谢
发布于 2018-01-27 23:50:49
您正在尝试在其作用域之外使用一个变量。检查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);
}
}https://stackoverflow.com/questions/48481703
复制相似问题