2014-02-05 10 views
1

Я использую API-интерфейс PHP Mixpanel и хочу позвонить 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

по-видимому, переменная $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. Вероятно, вам нужно передать эту переменную методу в качестве параметра.

Смежные вопросы