2013-12-09 4 views
3

단일 클래스 내에서 어떤 함수가 실제로 실행되기 전에 함수를 호출하기 위해 _ 호출/ _callStatic 함수를 사용할 수 있습니다. 그러나 나는 아직 부모에게 적용 할 수있는 해결책을 찾지 못하고 있는데, 그것은 아이들이 물려 받게 될 것입니다.PHP : 하위 클래스의 함수가 호출 될 때마다 함수 호출

내가 생각할 수있는 유일한 방법은 내 코드가 포함 된 상위 함수를 호출하는 각 클래스 내에 작은 코드 스 니펫을 넣는 것입니다.

구현할 수있는 더 좋은 해결책이 있습니까?

+1

'__call'은 자식 클래스에 의해 상속받습니다. 그리고 어떤 기능이 실제로 실행되기 전에 '실행되지 않습니다'. 실제로 호출하는 함수가 없거나 해당 범위에서 액세스 할 수없는 경우 호출됩니다. 귀하의 질문은 나에게 분명하지 않습니다. 데모 코드를 추가 할 수 있습니까? –

답변

0

PHP에는 불행히도 메서드가 호출 될 때마다 실행되는 마법 메서드가 없습니다.

당신이 찾고있는 해결책이 데코레이터라고 생각합니다.이 기사에서 PHP의 메소드/클래스 꾸미기에 대한 팁을 참조하십시오.

how to implement a decorator in PHP?

0

그것은 몇 가지 코드를 보지 않고 당신을 도울 어렵다. 그러나 하위 클래스에서 __call/__callStatic을 다시 정의하지 않는다고 가정하면이 메서드는 수퍼 클래스에서 메서드를 상속해야합니다.

의 경우은 서브 클래스에 __call/__callStatic을 다시 정의하면 수퍼 클래스의 정의를 무시합니다. 어떻게 든 슈퍼 클래스의 메소드를 호출해야합니다. 이렇게하려면 parent 키워드를 사용할 수 있습니다. 다음 예를 참조하십시오 :

class SuperClass 
{ 
    public function __call($name, $arguments) 
    { 
     // Do some stuff 
    } 
} 

class SubClass extends SuperClass 
{ 
    public function __call($name, $arguments) 
    { 
     // Execute the parent's __call() method 
     return parent::__call($name, $arguments); 

     // Do some extra stuff here 
    } 
} 
1

최소한 PHP 5.4 이상이면 특성을 사용할 수 있습니다. http://php.net/traits

코드에 약간의 조정이 필요하지만 원하는 동작을 허용 할 수 있습니다. 유스 케이스에 대한 추가 정보가 있습니까? 내가 당신의 설명에서 로깅 생각, 맞습니까?

+0

함수가 실행될 때마다 클래스, 이름 및 인수와 함께 실행되었음을 기록하려고합니다. – Ryan

+0

전체 응용 프로그램 전체에서? 이것은 또한 호출 스택을 통해 가능할 수 있습니다. 그렇지 않으면 꽤 어려울 수도 있고 적어도 좋은 코딩 방법을 깨뜨릴 수도 있습니다. 나는 그것에 대해 생각하고 어쩌면 몇 가지 예를 제시 할 것이다. –

+0

그래, 전체 응용 프로그램을 통해. 몇 가지 초기화 함수를 가진 하나의 메인 클래스와, 각각 다른 목적과 관련된 함수를 포함하는 메인 클래스를 확장하는 몇 개의 클래스가 있습니다. – Ryan

관련 문제