我使用的是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');
}
答案 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
变量。您可能需要将该变量作为参数传递给方法。