2010-03-10 4 views
4

내가하고있는 직업 응용 프로그램에 대한 책자 퀴즈가 있는데, 그것은 분명히 내 PHP 지식의 단점을 강조 표시했습니다.PHP 클래스 예외 처리 질문

참고로, 저는 직접 대답을 요구하지는 않습니다. 나는 오해하고있는 답변이 부족하다는 것을 보여 주려고합니다. 이제

3. Finish the following class to print "Person->name has been zapped" when the 
following is executed on a Person object: print $person; 


class Person{ 
    private $name = ''; 
    public function __construct($name){ 
    $this->name = $name; 
    } 
} 

$person = new Person('fred'); 
print $person; // fred has been zapped 

어느 나는 예외를 던지는 일이 될 것 '인쇄'를 생각 했을까, 아니면 그냥 질문을 오해하고있어 비록 (클래스에 예외 처리를 추가하는 몇 가지 방법이있다 : 질문이다. 나는 try..catch에서 인쇄물을 퍼팅하는 것이 "catchable fatal error"로 실패 할 수 있다는 것을 (빠른 테스트에서) 알 수있다. (내 catch는 실행되지 않았다.)

나는 무엇을 읽고 있어야 하는가? ?

데이비드

+0

질문에 대답하지 않으려 고 시도합니다. 대신, 당신에게 힌트를주기위한 시도 : 문제 (# 3)에서 언급 된 예외는 어디에 있습니까? 너는 시도 잡기를 사용해야한다고 생각하게 만들었던가? – Josh

답변

4

음, 소리에 PHP5 수업에 대한 지식을 찾고있는 것처럼 보입니다. PHP의 magic methods을 살펴보고 내가하는 일을 성취하는 방법에 대한 더 많은 통찰력을 갖도록 제안합니다.

기본적으로 문제의 개체를 인쇄 할 수있는 표현이 필요합니다.

3

당신이/출력 객체의 마술 방법이라고 __toString() 에코하려고하면 - 그 객체가의 인스턴스이다 클래스에 대해 정의합니다. 여기

, 당신은 이름을 반환 것 __toString 방법의 정의를 추가하려면 클래스를 수정해야 할 것, 그리고 문자열의 일부 " 기절하고있다"

class Person{ 
    private $name = ''; 
    public function __construct($name){ 
    $this->name = $name; 
    } 
    public function __toString() { 
    return $this->name . ' has been zapped'; 
    } 
} 

$person = new Person('fred'); 
print $person; // fred has been zapped 

예상 출력을 얻었습니다.

fred has been zapped