PHP:从一个严重死亡的类中调用私有方法

Ale*_*x C 2 php oop model-view-controller private-members

所以这听起来有点令人费解.手指交叉我清楚地看到了.

我正在使用PHP的MVC框架.

我加载了一个调用帮助器的控制器/报告/索引

<? class ReportController extends Controller { 
        public function index() {
            $foo = MainReport::get_data($_REQUEST);
        }

   }
 ?>
Run Code Online (Sandbox Code Playgroud)

在助手里面

<? class MainReport extends foo {
        public function get_data($_REQUEST) {
            // do stuff
            return $stuff_done;
        }

 }
?>
Run Code Online (Sandbox Code Playgroud)

我运行它就像^这一切都很好.不幸的是,我想像这样运行它:

<? 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();    
        }

 }
?>
Run Code Online (Sandbox Code Playgroud)

不幸的是......当我尝试从一个我从其他地方打过电话的班级中调用一个私人函数时......(哇,这是一口)......一切都死了.死得非常厉害,我甚至没有得到错误.

对我来说,似乎很明显我有一种令人难以置信的类似语法问题......但是如何在类中正确访问私有函数?

也许是这样的:self :: do_stuff();

那么声明和访问私有类变量呢?

 private $bar = array();
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助.

Zak*_*Zak 7

你是从静态上下文调用你的函数,

MainReport::get_data($_REQUEST)
Run Code Online (Sandbox Code Playgroud)

因此$在函数内部不存在.

如果要在静态上下文中调用另一个类函数,则还必须静态调用它.

public function get_data($_REQUEST) {
        // do stuff
        $x = MainReport::do_stuff();    
    }
Run Code Online (Sandbox Code Playgroud)

或者,您可以在原始调用中创建类的实例并使用实例:

$myMainReport = new MainReport();
$myMainReport->get_data($_REQUEST);
Run Code Online (Sandbox Code Playgroud)

然后您的类代码将按预期工作