2012-07-26 6 views
1

에서 나는 조회수가 메소드의 컨텍스트 내 존재하여 모델에 액세스하는에 만든 MVC 시스템을 사용하고 $this에 액세스하는 것이 가능. 뷰의

예, 동적으로 포함 :

... 
<div> 
    Hello <?= $this->user->name ?> 
</div> 
... 

지금, 나는 몇 가지 추가 매개 변수, 함수로 인수 분해하고 싶은 몇 가지 코드가 있습니다. 예를 들어 :

function colored_hello($color) { 
?> 
<div style="background-color:<?= $color ?>"> 
    Hello <?= $this->user->name ?> 
</div> 
<? 
} 

문제는 함수가하는 방법이 아니기 때문에 내가 $this에 액세스 할 수없는 것입니다. 하지만 프레젠테이션 자료로 내 모델이나 컨트롤러를 망치고 싶지 않습니다.

Hance, 내가하는 방법으로, 동적으로 함수를 호출 할 수 있도록하고 싶습니다. 처럼 측면 지향 프로그래밍 :

# In the top view 
magic_method_caller("colored_hello", $this, "blue") 

은 가능합니까? 아니면 더 좋은 방법이 있습니까?

+1

패스 $를이 인수로? –

+0

$ this를 인수로 전달하지 않는 이유는 무엇입니까? 또한, php 매뉴얼에서'call_user_func'에 대해 살펴보십시오. – Florian

+0

*보기가 모델에 액세스 * - 오 마이 ... –

답변

0

는 조금 해킹하지만 당신은 호출자가 개체를 얻을 수 debug_backtrace()를 사용할 수 있습니다. 그러나 나는 당신이 공공의 값을 수 있다고 생각 :

function colored_hello($color) { 
    $tmp=debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT); 
    $last=array_pop($tmp); 

    $caller = $last['object']; 

    print_r($tmp); 
    print_r($last); 
    print_r($caller); 

    ?> 
    <div style="background-color:<?= $color ?>"> 
    Hello <?= $caller->user->name ?> 
    </div> 
    <? 
} 

(코드 testet 아니지만 그것은 당신에게 힌트 :-) 제공)

3

하는 Closure::bindTo

에서보세요을 당신은 정의해야합니다/함수를 약간 다르게 호출하면 객체 내부에서 $this에 액세스 할 수 있습니다.

class test { 
    private $property = 'hello!'; 
} 

$obj = new test; 

$closure = function() { 
    print $this->property; 
}; 

$closure = $closure->bindTo($obj, 'test'); 

$closure(); 
1

속성으로 패스 $this,하지만 진지 : 당신은 정말보기 파일의 기능을 가지고는 안된다.

-1

당신은 다른 방법으로 함수에 전달할 수 :

function coloured_hello($object, $color) { 
    //Code 
    $object->user->name; 
} 
+0

또는 클래스 유형 힌트 사용 -이 목적을 위해서 사용됨 – Yang

관련 문제