2012-03-28 2 views
3

생성자와 toString 메서드로 클래스를 만들었지 만 작동하지 않습니다. 난 그냥 할 경우PHP에서 __toString()을 사용하여 아무 것도 인쇄 할 수없는 이유는 무엇입니까?

Fatal error: Cannot access empty property 

:

$string = (string) $course; 

아무것도 출력합니다하지

class Course 
{ 
    protected $course 
    public function __construct() 
    { 
     $this->$course = "hello"; 
    } 

    public function __toString() 
    { 
     $string = (string) $this->$course; 
     return $string; 
    } 
} 

가 나는 오류가 발생합니다.

저는 Java의 toString 메소드에 익숙하지만 PHP의 마법 메서드는 처음입니다.

+0

을 (:) 복사 붙여 넣기로 이동합니다) 당신이 의미 생각 읽을 제목은 "할 수 없습니다." –

답변

9

생성자에 약간의 오타가, 그것은해야한다 :

protected $course; 
public function __construct() 
{ 
    $this->course = "hello"; // I added $this-> 
} 

당신은 지금 당신의 __toString() 함수가 "안녕하세요"인쇄됩니다 호출하는 경우.

업데이트
이 같은 __toString() 기능을 변경해야합니다

public function __toString() 
{ 
    return $this->course; 
} 

귀하의 전체 코드이 될 것입니다 :

class Course 
{ 
    protected $course; 
    public function __construct() 
    { 
     $this->course = "hello"; 
    } 

    public function __toString() 
    { 
     return $this->course; 
    } 
} 
+0

동일한 오류가 발생합니다 : 빈 속성 오류에 액세스 할 수 없지만 지금은 그것은 생성자의 라인을 참조합니다. –

+0

헴, 그건 사실이야! – haltabush

+0

_toString 메소드의'$ this -> $ course'는 해당 메소드에 로컬'$ course' 변수가있는 경우에만 작동하므로 코드는 여전히 손상됩니다. 하지만 생성자 오류 잡기 +1. 너와 haltabush 사이에서, 당신은 문제를 해결했습니다. –

7

당신은 마술 방법을 알았지 만 여기에 오류가 있습니다 : $ course is not defined.

귀하의 오류가이 라인에 : 그것은해야

$string = (string) $this-> $course; 

$string = (string) $this->course; 

당신은 PHP에서이 같은 것을 할 수 있다는 것을 알고 있습니다 여기에

$course='arandomproperty'; 
$string = $this->$course; //that equals to $this->arandomproperty 

을, $ course가 정의되어 있지 않으므로 기본값은 ''(기본값은 NOTICE 오류입니다. 최소한 deve 중에 표시하거나 로그해야합니다.


편집 lopment) :
당신은 또한 당신의 생성자에 eror을 가지고, 당신은 여기 $this->course='hello';


편집이

을해야는 작업 코드입니다. 여기서 이해할 수없는 것이 있습니까?

<?php 
class Course 
{ 
    protected $course; 
    public function __construct() 
    { 
     $this->course = "hello"; 
    } 

    public function __toString() 
    { 
     $string = (string) $this->course; 
     return $string; 
    } 
} 
$course = new Course(); 
echo $course; 
+0

나는 모든 제안을 시도했지만 여전히 작동하지 않는다 : (나는 정말로 이해하지 못한다.) –

+0

'$ this-> $ course'을 제거하고'$ this-> course'로 대체한다 – haltabush

+0

당신은 "아무것도 인쇄하지 않는다"라고 말하면서 프린트 또는 에코를 사용하지 않을 수도 있습니다. echo (string) $ course;을 시도하십시오 –