2010-02-08 18 views
34

Próbuję użyć metody z innej metody w klasie. Nie mam dużego doświadczenia w OOP PHP5 i rozglądałem się za odpowiedziami, ale nie mogłem ich znaleźć. Próbuję użyć getClientInfo() w sendRequest(), która jest w tej samej klasie.Wywołanie metody z innej metody w tej samej klasie PHP

class DomainHandler { 

    public static function getClientInfo($db, $client_id) 
    { 
     //Do stuff 
    } 

    public static function sendRequest($details) 
    { 

     require_once('MySQL.class.php'); 
     $db = new MySQL; 

     getClientInfo($db, $client); 
    } 
} 

I mówi mi:

Fatal error: Call to undefined function getClientInfo()

Próbowałem zostały również

parent::getClientInfo($db, $client); 

i

$this->getClientInfo($db, $client); 

bezskutecznie.

Wszelkie pomysły?

Odpowiedz

40

Jest to metoda statyczna, więc musisz zadzwonić pod numer self::getClientInfo lub DomainHandler::getClientInfo.

Ponadto: Możesz chcieć przeczytać o programowaniu zorientowanym obiektowo, ponieważ wygląda na to, że jeszcze nie zrozumiałeś, o co tak naprawdę chodzi (to nie tylko umieszczanie funkcji między klasą Foo {i} i umieszczanie przed nimi statycznych statystyk)

+3

Dzięki! Tak, wiem, że wiem bardzo mało o pełnym OOP (PHP5), ale niestety mój szef nie da mi wolnego dnia, żeby przeczytać coś, co chce teraz naprawić. :) Tbh, ja naprawdę nie wiem, dlaczego masz statyczne i publiczne przed metodą? Ale dostanę się tam. Jeszcze raz dziękuję za pomoc. –

3

„ja” jest kluczowe szukasz

powiedział, że można wyjaśnić, dlaczego trzeba swoje metody do być statyczna? "statyczny" jest kiepskim stylem i należy go unikać.

+1

Nie powiedziałbym, że "statyczny" jest kiepskim stylem mimo, że zgadzam się w tym przypadku, że nie został on poprawnie użyty. Statyczny ma miejsce i czasami nie czyni czegoś statycznego złym stylem. Zgadzam się jednak, że wiele osób używa metod statycznych niepoprawnie i używa klas tylko tak, jakbyś używał przestrzeni nazw C++ tylko ze statycznymi metodami => _to ma zły styl. – dbemerlin

17

Jesteś deklarując funkcje jak static i stąd nie są one w kontekście obiektu – można nazwać je DomainHandler::getClientInfo() lub self::getClientInfo().

Jeśli nie chcesz, aby funkcje były statyczne, możesz usunąć słowo kluczowe static, a następnie zadziała $this->getClientInfo().

+0

a jeśli chce, żeby ta metoda była statyczna? – Natrium

+4

@Natrium, następnie może użyć tego, co zasugerowałem jako pierwszy. –

+2

Przepraszam, musiałem mieć piasek w moich oczach ... – Natrium

Powiązane problemy