2012-04-13 3 views

답변

3

아니요. 부탁하는 바는 "advice" 또는 aspect oriented programming입니다. PHP에서 이것을 허용하는 몇 가지 실험적인 확장이 있다고 생각합니다. 그러나 프로덕션 환경에서 사용하려는 것은 없습니다.

당신이 할 수있는 일은, 모든 전화를 __call을 통해 위임하는 래퍼를 만드는 것입니다. 예컨대 :

class Foo { 
    function bar() { 
    echo "Foo::bar\n"; 
    } 
} 
class AdviceWrapper { 
    protected $subject; 
    function __construct($subject) { 
    $this->subject = $subject; 
    } 
    function __call($name, $args) { 
    echo "Before $name\n"; 
    $result = call_user_func_array(array($this->subject, $name), $args); 
    echo "After $name\n"; 
    return $result; 
    } 
} 
$foo = new AdviceWrapper(new Foo()); 
$foo->bar(); 

은 참조 : https://stackoverflow.com/questions/4738282/are-there-any-working-aspect-oriented-php-libraries

+0

이것은 완벽합니다. 감사합니다. – ubugnu

0

왜 필요한가요? 당신은 처음에는 당신이 가지고있는 각각의 방법으로 방법을 만들고 그것을 부를 수 있습니다.

편집 : 검색 대상은 PHP의 aspect 지향 프로그래밍과 비슷합니다. google에서 빠른 검색 결과는 여기에서 확인하실 수 있습니다. http://code.google.com/p/apdt/

아마도 도움이됩니다.

+0

공간 절약 : – ubugnu

+0

게시물을 편집했습니다. 아마도 도움이 될 것입니다 :) – kufi

+0

Kufi 그것은 AOP가 필요한 것 같습니다 감사합니다. 내 작은 프로젝트에 대해서는 troelskn의 솔루션이 충분하다고 생각합니다. – ubugnu

0

당신이 그들 앞에 _와 방법의 이름을 바꿀 수 있습니까? 그러면 모든 호출은 __call/__callStatic을 통해 라우팅됩니다.

+0

이것은 작동하지 않습니다! – ubugnu