2012-06-28 2 views
3

블로그 응용 프로그램에 대한 Yii Framework의 자습서를 살펴 보겠습니다. 나는 이해 과정에 있지만 중요한 구성 요소 하나를 이해하지 못한다. 이것은 특정 .php 보기 파일의 시작 부분에있다. 난 그냥 $this에서 온 않는 경우 알고 싶습니다

<?php 
$this->breadcrumbs=array(
    'Manage Posts', 
); 
?> 

. 알다시피, $this은 클래스의 범위 내에있는 경우에만 사용할 수 있습니다. 그러나, 여기에 구현 된 클래스가 없기 때문에 누군가 Yii가 나를 어떻게하는지에 대해 나에게 계몽 할 수 있습니까?

답변

3

$this은 현재 컨트롤러 클래스를 나타냅니다. 컨트롤러가 /Controller.php 인 경우 $breadCrumbs=array();이 표시됩니다. definitive guide to views 참조 : 뷰 스크립트 내부

, 우리는 $이 를 사용하여 컨트롤러 인스턴스에 액세스 할 수 있습니다. 따라서 우리는 컨트롤러에서 $ this-> propertyName을 평가하여 컨트롤러의 모든 속성을 가져올 수 있습니다.

컨트롤러는 궁극적으로 renderInternal을 사용하여보기를 렌더링합니다. 당신은 그 함수의 소스를 볼 경우, 당신은 php's require()가 표시됩니다

public function renderInternal($_viewFile_,$_data_=null,$_return_=false) 
{ 
    // we use special variable names here to avoid conflict when extracting data 
    if(is_array($_data_)) 
     extract($_data_,EXTR_PREFIX_SAME,'data'); 
    else 
     $data=$_data_; 
    if($_return_) 
    { 
     ob_start(); 
     ob_implicit_flush(false); 
     require($_viewFile_); 
     return ob_get_clean(); 
    } 
    else 
     require($_viewFile_); 
} 

을 그리고 있기 때문에 사용이 필요, $이 코드에 그 시점에서 볼 수는 포함되지 :

파일이 포함되어 있으면 포함 된 코드가 포함 된 행의 변수 범위를 상속받습니다. 호출 파일의 해당 행에서 사용 가능한 변수는 호출 된 파일 내에서 그 시점부터 사용할 수 있습니다. 그러나 포함 된 파일에 정의 된 모든 함수와 클래스는 전역 범위를 갖습니다. 우리가 $this->render('view');을 수행 할 때

는 따라서 view은 $ this에 액세스 할 수 있습니다.

+0

이것은 내가 이해하는 순간에 PHP에서 오랫동안 프로그래밍되지 않았기 때문에 잘 모르겠다. gotcha를 놓친 적이있다. –

+1

아주 좋은 설명! PHP로 시작하는 중입니다. 어떤 PHP 프레임 워크를 사용해야할지 모르겠습니다 ... 결국 Yii와 함께 작업하기로 선택한 이유는 무엇입니까? – matt

2

저는 Yii가 템플릿을 클래스로 컴파일하므로 런타임에는 실제로 클래스가 있습니다. 자세한 내용은 __FILE__get_class($this)을 확인하십시오.

+0

파일이 템플릿인지 어떻게 알 수 있습니까? – matt

1

이 템플릿이 메서드 내에서 단지 require d이면 실제로는 개체 범위가됩니다. 그래서 this은 temlate를 renderes하는 몇몇 View 객체의 약자입니다.

관련 문제