2011-02-22 3 views
1
class DOM extends ContentTag { 
    private $body; 
    private $head; 
    public function Head() { 
     return $head; 
    } 
    public function Body() { 
     return $body; 
    } 
    public function __construct() { 
     parent::__construct('html'); 
     Tag::Extras('xmlns="http://www.w3.org/1999/xhtml"'); 
     $head = new ContentTag('head'); 
     $body = new ContentTag('body'); 
     ContentTag::AddTag($head); 
     ContentTag::AddTag($body); 
     $head->AddTag(MakeTag('meta')->Extras('http-equiv="Content-Type" content="text/html; charset=utf-8"')); 
    } 
    public function Emit() { 
     echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 
     Emit(); 
    } 
} 

// top.php 
$pagediv = 0; 
$view = new DOM(); 
$view->Head()->AddTag(MakeLink('css/style.css', 'stylesheet', 'text/css')); 

이 코드는 변수에 액세스하는 하단 라인에 실패 객체의 다음 난에 그 정확한 변수에 AddTag라고하더라도 fails- AddTag를 호출 DOM의 생성자는 괜찮습니다. 코드는 파스 분석을합니다.이게 이상한 우선 순위입니다. 무언가 또는 무엇입니까?PHP- 비 객체에 메소드를 호출하지만, 분명히

+0

첫 번째 방법으로'__construct()'를 만들면 작동합니까? – alex

+0

아니, 변경하지 마십시오. – Puppy

답변

2

$this->head으로 $head 속성을 설정하여 반환해야합니다.

그렇지 않으면 $head 속성은 NULL이됩니다.

+0

그리고 생성자의'$ head' 호출은 현재 (ContentTag :: AddTag가 참조를 어딘가에 저장하지 않는 한) 아무데도 연결되지 않는 것으로 보입니다. –

+0

농담 야. 모든 멤버 변수 접근시'$ this'에 대한 명시 적 참조? 나는이 언어가 싫어. – Puppy

+0

@DeadMG 그래, 그게 그 방법인데, 나는 두려워. 그것은 정말로 나에게 너무 많은 것을 괴롭히지 않는다, 나는 내가 그것과 함께 생활하는 것을 배웠다 고 생각한다 :) – alex

관련 문제