2010-08-03 8 views
1

저는 ZendFramework에 대해 다소 새로운 것으로 생각하고 있습니다.젠드 프레임 워크 뷰 스크립트, 함수 및 변수 스코프

<?php 

function getErrorString($element) 
{ 
echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

$string = ''; 
if(!empty($this->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($this->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString("blah"); 
die(); 

나에게 준다 : 당신이보기 내에서 함수를 만들 때

Fatal error: Using $this when not in object context in index.phtml on line XX 

그것은 나에게 보인다 내보기 스크립트 (index.phtml), 나는 말한다 코드의이 비트가 $ this 변수를 잃게됩니다. 나는 그물 주위를 검색했는데, 내가하고있는 것을 성취하려고하는 다른 사람을 볼 수 없다. (매우있을 법하지도 않다. 어쩌면 내가 잘못 찾고있다.)

다른 응용 프로그램을 개발 한 경험이 있기 때문에이 함수를 별도의 도우미에 배치해야하는 이유는 알 수 없습니다. 특히이 함수가 호출 될 유일한 곳이기 때문에 더욱 그렇습니다.

모든 아이디어는 크게 감사하겠습니다.

답변

2

함수 getErrorString()은 Zend_View-Object의 객체 메소드가 아닙니다. 그것은 자체 범위를 가지고 있으며 $ this에 도달 할 수 없습니다.

다음 코드는 빠른 응답 KC의 index.phtml에 당신을 위해

function getErrorString($viewObject, $element) 
{ 
echo "<pre>"; 
print_r($viewObject); 
echo "</pre>"; 

$string = ''; 
if(!empty($viewObject->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($viewObject->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString($this,"blah"); 
die(); 
0

"$this"변수를 마지막으로 사용하면 치명적인 오류가 표시되는 주된 원인 일 수 있습니다. 클래스 정의 에 다른 것을 쓰지 못하기 때문에 그 클래스에 대한 & 속성을 정의하는 것을 제외하고는 상당히 정당합니다..

또한보기 페이지에서 함수를 만드는 경우 해당 함수 내에서 기본적으로 "$this"변수에 액세스 할 수 없습니다. 그러므로 "$this"변수를 전역 변수로 만들거나 "$ this"변수와 관련된 필수 부분을 함수 정의 바깥에 인쇄해야합니다. 당신은 함수 정의에 위의 코드를 작성할 때

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

는 그래서, PHP 파서는이 "$this"변수에 대한 개체 컨텍스트를 찾을 수 없습니다. "$ this"변수를 잃어 버리는 것이 아니라 액세스 할 수 없지만 누락 된 논리에 해당합니다.

희망이 있습니다.

+0

감사를 작동합니다! 내가 무슨 뜻인지 이해가 확실하지 않습니다. 클래스 정의에 다른 것을 쓸 수는 없지만 메서드를 정의 할 수 있다고 말했습니까? 또한 $ _ (this)가 작동하지만 왜 getErrorString ("blah")이 인쇄되지 않는지는 알 수 없습니다. 건배! – lyf

+0

@lyf - 함수 정의가 클래스 정의 내에서 바인드되지 않으므로 함수 정의 내에서 "$ this"를 사용할 수 없습니다. –