2

所以这听起来可能有点令人费解。手指交叉我清楚地遇到了。

我在 PHP 中的 MVC 框架中工作。

我加载了一个调用助手的控制器/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();    
        }

 }
?>

不幸的是......当我尝试从一个我从其他地方调用的类中调用一个私有函数时......(哇,那是一口)......一切都死了。死得非常非常糟糕,我什至没有收到错误。

对我来说,很明显我遇到了某种令人难以置信的愚蠢的语法问题......但是我如何正确地从类中访问私有函数?

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

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

 private $bar = array();

欢迎任何帮助。

4

2 回答 2

7

您正在从静态上下文中调用您的函数,

MainReport::get_data($_REQUEST)

因此 $this 在该函数内部不存在。

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

IE

public function get_data($_REQUEST) {
        // do stuff
        $x = MainReport::do_stuff();    
    }

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

$myMainReport = new MainReport();
$myMainReport->get_data($_REQUEST);

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

于 2010-09-07T20:53:56.113 回答
1

我刚刚发现 self:: 也可以

如果我想拥有私有类变量,我可以使用声明和访问它们

private static $foo

self::$foo = "foo";

另外可以使用私有函数访问

self::function_foo();
于 2010-09-08T14:02:02.820 回答