2011-11-02 4 views
2

저는 CMS를 개발 중이며 $ view라는 객체를 사용하면서 디자이너가 모든 내용을 호출 할 수있게하려고합니다. 내 문제는 포함 된 템플릿 파일이 $ view-object에 더 이상 액세스 할 수 없다는 것입니다.포함 된 파일에 객체 전달하기 oop php

view 객체에는 page_title(), ... 등이 포함되어 있습니다. 저는 템플릿을 사용하기 때문에 디자이너가 $ view 객체에 액세스하여 올바른 템플릿을 호출 할 수 있어야합니다.

백업에 일부 코드 내 설명 :

내 라이브러리 :

class view { 
    function page_title() {} 

    function template() { 
     $this->template = new template; 
     $this->template_include = $this->template->template_include(); 
    } 
} 

class template { 
    function template_include(){ 
     include('template.php'); 
    } 
} 

내 인덱스 파일 :

$view = new view; 
$view->template(); 

내 template.php :

$view->page_title(); 

그러나 나는 프로 우 블과 마주 쳤다. m : 뷰 객체가 생성 된 후 뷰 클래스의 메서드를 사용하여 template_include() 메서드로 올바른 template.php가 포함 된 객체를 호출합니다. 이 템플릿에서 나는 오른쪽 제목, 내용을 호출하기 위해 view-object를 다시 사용합니다 ... 내 문제는 포함 된 템플릿 파일이 더 이상 $ view-object에 액세스 할 수 없다는 것입니다.

는 모든 오류를 알고 추측 : 치명적인 오류 : 비 객체() 멤버 함수의 FIELD_TITLE에 전화 나는 디자이너/사용자에 대해 가능한 한 쉽게이 CMS를 만들기 위해 헌신 해요

, 그래서 나는 오직 뷰 - 객체가 템플릿 파일 등을 포함하지 않고 모든 것을 요구하기를 원한다.

고마워!

답변

4

지수

$view = new view; 
$view->template($view); 

클래스

class view { 
    function page_title() { echo "this works!!!";} 

    function template($view) { 
     $this->template = new template; 
     $this->template_include = $this->template->template_include($view); 
    } 
} 

class template { 
    function template_include($view){ 
     include('template.php'); 
    } 
} 
+1

고마워요! 이 작동합니다.그것은 처음 OOP php입니다. 그래서이 모든 것으로 여러분 모두를 귀찮게하지 않았 으면합니다. – NikM

+0

전혀 문제 없습니다. php를 사용하면 함수 정의 ...'function template (& $ view)'에서 변수 이름 앞에'&'를 사용하여 변수를 참조로 전달할 수도 있지만이 경우에는 사용하면 안됩니다 ... – Marcx

0

$ view-object를 전역 적으로 선언하려고 시도 했습니까?

template.php에 모두 global $view;을 넣으면 문제가 해결 될 것입니다.

당신은 방법/클래스에 $view를 전달할 수
+0

감사합니다.하지만 사용해 보았지만 작동하지 않습니다. 테스트로 나는 객체와 함께 그것을 시도하고 '정상적인'포함 (메소드에 포함되지 않음)이 정상적으로 작동합니다. 그러나 물론, 그건 내가 원하는 와트가 아니에요 :) – NikM

0

당신이 함수 내에서 템플릿 파일을 포함하는 경우,이 파일의 내용을 해석 이 기능의 범위.

이처럼 호출하여 지금
class view { 
    function page_title() {} 

    function template(array $variables) { 
     $this->template = new template; 
     $this->template_include = $this->template->template_include($variables); 
    } 
} 

class template { 
    function template_include(array $variables){ 
     if($variables){ 
      extract($variables); 
     } 
     include('template.php'); 
    } 
} 

, 당신은 $view$title에 액세스 할 수 있습니다 : 그것을 해결하는 가장 좋은 방법은이 범위에 갖고 싶어 변수, 즉 함께이 기능에 연관 배열을 전달하는 것 템플릿의 변수 :

$view = new view; 
$vars = array(
    'view' => $view, 
    'title' => 'some title' 
); 
$view->template($vars); 
+0

고마워요, 이것도 작동합니다! – NikM