2012-11-14 2 views
0
나는 다음과 같은 PHP 클래스 예제 설정이있는 경우

... PHP - 기본 수준의 기능을 이해

class foo { 
    public $x = 2; 

    public function getX() { 
    return $this->x; 
    } 

    public function setX($val) { 
    $this->x = $val - $this->x; 
    return $this; 
    } 
} 

$X = (new foo)->setX(20)->getX(); 

가 어떻게해야 할 제공된 -> getX(); 객체 초기화 과정의 끝 부분에 18을 얻기 위해서? 어떻게

Catchable fatal error: Object of class foo could not be converted to string in C:\... 

$x = 2 대중에게 ...

$X = (new foo)->setX(20); 
echo $X; // and show 18 without errors. 

가 대신 오류가 발생하고 말한다 ... 나는 단순히 대중 getX() 함수를 숨기고 쓸 수 없습니다 $this->x 다스 려하지 않는다 올 ? 나는 왜 우리가 공공 기능 getX()에 의존하는지 조금 혼란스러워합니다. 도움을 주셔서 미리 감사드립니다.

답변

2

return $this;을 수행 할 때 foo 클래스의 인스턴스를 반환했기 때문에. 출력

public function setX($val) { 
    $this->x = $val - $this->x; 
    return $this->x; 
    } 
2

echo $X 시도 객체를 : 당신이 다음 위와 같이 작업 할 경우 다음과 같이 당신은 $x를 반환해야합니다. 그러나 객체에는 magic method__toString()이 없으므로 PHP는 객체가 문자열 컨텍스트에서 사용될 때 정확히 WHAT을 출력 할 수 없습니다.

당신이 당신의 개체 정의에이를 추가 한 경우 :

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

당신이 echo $X을 할 때 "제대로"18 얻을 것입니다.

+0

Marc B에게 감사드립니다. 지금 제 지식에 추가하겠습니다! – blackhawk