2014-04-11 3 views
3

확인을 포함 후에 클래스 멤버를 볼 수 없습니다 : 사이트와 페이지에 대한PHP- 내가 너무 같은 index.php에이

<?php 
require 'php/stdlib.php'; 


$site->page->render(); 


foreach($page as $var => $value) { 
    echo $var ." is ". $value." <br/>"; 
} 
?> 

하여 obj 생성은 다음 stdlib 파일에 분명히 사촌 노력하고 있습니다 - 각 루프는 다음을 인쇄합니다.

name is welcome 
headers is inc/index_h.php 
footers is inc/index_f.php 
contents is inc/welcome.php 

개체가 생성되었음을 나타냅니다.

여기
public function render_page(){ 

    $this->page->render(); 
} 

페이지는 --- 렌더링 : 나는 또한 사이트 --- 페이지 --- 렌더링되는 적절한 결과 여기 와 VAR 덤프를 않았다

public function render(){ 

     include $this->headers; 
     include $this->contents; 
     include $this->footers; 
    } 

을 그러나 결과

정의되지 않은 변수 :

또한

스크립트는 다음과 같다비 객체의 속성을 얻으려고 노력

:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title><?php echo $page->name; ?></title> 
<script src="/scripts/jquery.js"></script> 

</head> 

<body> 

오류가 실제로 HTML 제목 태그에 인쇄하지 : 모두 오류가 나는 페이지 헤더 포함 파일에 사용되는 내 $ 페이지 개체를 가리 화면에서 나는 그것을보기 위해 브라우저에서 소스보기를 사용해야한다. Include를 사용할 때 $ page 객체가 보이게하려면 어떻게해야합니까? Im은 보통 답을 찾기에 꽤 좋습니다.하지만이 것은 나를 이틀 동안 저주했습니다. 지금 (나는 많은 다른 것들에 대해 많은 것을 배웠다. 답을 찾는 동안 모든 것이 사라지지는 않는다.) 누군가가 나를 도울 수 있다면 크게 감사하겠다.

아마 페이지 및 사이트 개체와 stdlib.php에서 인스턴스화하는 것을 추가해야

$site = new csite(); 
site_ini($site); 
$page = new cpage("welcome"); 
$site->setPage($page); 

답변

0

을 다음 당신이 사용하는 경우 PHP의 구축에 include 기능, 포함 된 파일의 내용이 실행됩니다 include에 대한 호출과 동일한 범위입니다. 따라서 실제로 코드가 실행될 때 포함 된 파일에서 $this을 호출하려고합니다. 실제로는 render() 메서드 안에 쓰여졌지만 해당 메서드에는 $page 변수가 선언되지 않았습니다.

반면에 include보다 먼저 $page = $this을 설정하는 것이 더 통사론적인 의미를 가질 수 있습니다.

제목이 그것을 제안하지는 않지만 실제로는 includerequire 함수의 중요한 측면을 강조 표시했기 때문에 투표했습니다 : 범위를 통과하는 방식. http://www.php.net/manual/en/function.include.php

편집 :

이 항목에 대한 자세한 내용

이 함수에 PHP.net 문서의 읽기 닫기가 한 예가 작동하는 이유를 명확히하기 위해, 그리고 다른 하나는하지 않습니다, 그것은 $ 페이지 때문이다 포함에서, 당신의 foreach와 같은 범위를 가지지 만, 렌더링 안에서 선언되지 않습니다.

그러나 글로벌로 가져 오지 마십시오. 문법적으로 렌더링 할 페이지를 렌더링하려면 다음과 같이하십시오. $ this