所以这听起来可能有点令人费解。祈祷我清楚地看到了。
我在 PHP 的 MVC 框架中工作。
我加载一个调用助手的 Controller /report/index
<? class ReportController extends Controller {
public function index() {
$foo = MainReport::get_data($_REQUEST);
}
}
?>
在助手内部
<? class MainReport extends foo {
public function get_data($_REQUEST) {
// do stuff
return $stuff_done;
}
}
?>
我运行它就像 ^这一切都很好。不幸的是,我想这样运行它:
<? class MainReport extends foo {
private function do_stuff() {
// do even better stuff here!
return $better_stuff;
}
public function get_data($_REQUEST) {
// do stuff
$x = $this->do_stuff();
}
}
?>
不幸的是......当我尝试从我从其他地方调用的类中调用私有(private)函数时......(哇,那是一口)......一切都死了。死得非常非常糟糕,我什至没有得到一个错误。
对我来说,很明显我遇到了某种令人难以置信的语法问题......但是我如何正确地从类中访问私有(private)函数?
也许是这样的: self::do_stuff();
如何声明和访问私有(private)类变量?
private $bar = array();
欢迎任何帮助。
最佳答案
您正在从静态上下文中调用您的函数,
MainReport::get_data($_REQUEST)
因此 $this 在该函数内不存在。
如果你想在静态上下文中调用另一个类函数,你也必须静态调用它。
即
public function get_data($_REQUEST) {
// do stuff
$x = MainReport::do_stuff();
}
或者,您可以在原始调用中创建您的类的实例并使用该实例:
$myMainReport = new MainReport();
$myMainReport->get_data($_REQUEST);
然后你的类代码将按预期工作
关于PHP:从严重死亡的类中调用私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662608/