2010-02-08 7 views
34

클래스의 다른 메서드 내에서 메서드를 사용하려고합니다. PHP5 OOP에서 많은 경험이 없으며 답변을 둘러 보았지만 찾을 수 없었습니다. 동일한 클래스에있는 sendRequest() getClientInfo() 사용하려고합니다.동일한 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); 
    } 
} 

그리고 그것은 나에게 말한다는 :

Fatal error: Call to undefined function getClientInfo()

나는 또한 아무 소용

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

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

을 시도했습니다.

아이디어가 있으십니까?

답변

40

정적 메서드이므로 self::getClientInfo 또는 DomainHandler::getClientInfo으로 호출해야합니다.

기타 : 실제로 무엇이 진짜인지 이해하지 못했기 때문에 객체 지향 프로그래밍을 읽길 원할 것입니다. (클래스 Foo {와} 사이에 함수를 넣는 것이 아니라 public static을 앞에 놓는 것입니다)

+3

고마워요! 예, 저는 OOP (PHP5)에 대해 거의 알지 못하지만, 불행히도 내 상사가 하루 종일 그가 원하는 것을 읽으 려하지 않을 것입니다. :) Tbh, 나는 왜 당신이 방법 전에 정적과 공개를 가지고 있는지 정말로 모르십니까 ?? 그러나 나는 거기에 도착할 것이다. 도움에 다시 한번 감사드립니다. –

3

'자기'당신이 말한

찾고있는 키워드는 정적으로 당신의 방법을해야 할 이유를 설명 할 수있다? "정적"은 스타일이 좋지 않으므로 피해야합니다.

+1

나는 '정적'이 좋지 않은 스타일 일지는 모르겠지만,이 경우 올바르게 사용되지 않았을 수도 있습니다. 정적은 장소가 있고 때로는 정적 인 것을 나쁜 스타일로 만들지 않는 경우가 있습니다. 나는 많은 사람들이 정적 메서드를 잘못 사용하고 정적 메서드 만 사용하여 C++ 네임 스페이스를 사용하는 것처럼 클래스를 사용한다고해도 동의합니다.> _that_는 나쁜 스타일입니다. – dbemerlin

17

함수를 static으로 선언 했으므로 객체 컨텍스트가 –이 아니므로 DomainHandler::getClientInfo() 또는 self::getClientInfo()으로 호출 할 수 있습니다.

명시 적으로 함수가 정적 일 필요가없는 경우 static 키워드를 삭제하면 $this->getClientInfo()이 작동합니다.

+0

그가 정적 인 방법을 원하면 어떻게해야합니까? – Natrium

+4

@Natrium, 그러면 그는 내가 처음 제안한 것을 사용할 수 있습니다. –

+2

죄송합니다. 내 눈에 모래가 있었어야합니다 ... – Natrium

관련 문제