如何从私有函数内引用对象

时间:2014-02-05 23:08:05

标签: php pdo mixpanel

我使用的是Mixpanel的PHP API,想要拨打mp->track

在这种情况下,mp->track被定义为mixpanel库中的一个对象,通过require(mixpanel.php)调用。

通常,这样可以正常工作:

require ('mixpanel-php/lib/Mixpanel.php');
$mp = Mixpanel::getInstance("XXX");
$mp->track('Session');

但是,我想在私有函数中调用mp->track(),但以下内容会出现object not defined错误:

require ('mixpanel-php/lib/Mixpanel.php');
$mp = Mixpanel::getInstance("XXX")

private function startSession() {

$mp->track('Session');

}

3 个答案:

答案 0 :(得分:0)

显然,在$mp方法的范围内无法访问startSession()变量。这是因为它不是global。一种解决方案是设置$mp全局,但这不是一个好的软件设计。您应该将其作为函数变量传递

private function startSession($mp) {
    $mp->track('Session');
}

或者您应该在私有方法中获取实例

private function startSession() {
    Mixpanel::getInstance("XXX")->track('Session');
}

答案 1 :(得分:0)

这是另一种方法;如果你定义

$mp = Mixpanel::getInstance("XXX");
在你班上的某个地方;你应该用它作为

$this->mp->track('Session');

所以你的代码应该看起来像

<?php
  require ('mixpanel-php/lib/Mixpanel.php');

  class MyClass {
    protected $mp;
    public function __construct() {
      $this->mp = Mixpanel::getInstance("XXX");
    }

    private function startSession() {
      $this->mp->track('Session');
    }

  }
?>

答案 2 :(得分:0)

关键字private仅在类中使用时才有意义。在这里,您尝试在类的上下文之外定义私有方法。即使这是一堂课。您的函数范围无法访问全局定义的$mp变量。您可能需要将该变量作为参数传递给方法。