2014-02-05 89 views
1

我使用Mixpanel的PHP API並要撥打mp->track內引用的對象。如何從一個私有函數

在這種情況下,mp->track被定義爲混合面板庫中的一個對象,通過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

顯然,$mp變量不能在startSession()方法的範圍內訪問。這是因爲它不是global。一種解決方案是設置全局的$mp,但這不是一個好的軟件設計。您應該把它作爲一個函數變量

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

,或者你應該得到的實例本身的私有方法

private function startSession() { 
    Mixpanel::getInstance("XXX")->track('Session'); 
} 
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'); 
    } 

    } 
?> 
0

private只能有一個類中使用時,意思是關鍵字。這裏你試圖在一個類的上下文之外定義一個私有方法。即使這是在一個班級內。您的功能範圍將無法訪問全局定義的$mp變量。您可能需要將該變量作爲參數傳遞給該方法。

相關問題