我需要在子类的方法中调用的函数中传递父类变量。
请看代码!
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...
有什么想法吗?
谢谢
最佳答案
您正在尝试使用其范围之外的变量。检查 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
}
警告:像您一样在类方法中使用函数是一种代码味道。考虑其他方法:
使用 anonymous functions 进行光重构
通过这种方式,您将确保您的函数类似于宏,将在某些循环中使用
public function test() {
// parent::$mysqli is accessable here!
$db = parent::$mysqli
$innerFuntion = function () use ($db) {
var_dump($db);
};
$innerFuntion();
}
正确的方法:提取法
将 innerFuntion
提取到私有(private)方法中,因此它不会弄乱对象的公共(public) 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);
}
}
关于php - 在类的方法函数中传递父类静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481703/