2014-10-30 8 views
0
<?php 

error_reporting(E_ALL); 
ini_set('display_errors', true); 

class Person { 

    private $data; 

    public function __construct($data) { 
     $this->data = $data; 
    } 

    public function __get($prop) { 
     return $this->data[$prop]; 
    } 
} 

$data = array('name' => 'Mark'); 
$person = new Person($data); 
echo $person->get('name'); 

?> 

이 기능을 사용하지 않아야합니까?왜 내 게터가 작동하지 않습니까?

나는 Fatal error: Call to undefined method Person::get()을 얻지 만, 나는 이유를 모른다. 마술 메서드에 대한 설명서에 따라,이 코드는 잘 작동합니다.

http://php.net/manual/en/language.oop5.overloading.php#object.get

+0

더 라인 없다 $ person-> get()이 __get() 메서드를 호출하는 설명서에 있습니다. 또한 get()을 호출하면 "마법 메서드"정의가 무의미 해집니다. –

답변

4

대신

echo $person->name; 

을보십시오.

그냥 경우도 :-) __get 마법 방법의 마술

, 당신은 그렇게 마법 통화를

public function __call($name, $arguments) { 
    echo $name; 
    // do something useful 
} 

를 정의하고 만들 수 있습니다

$person->someMethod(); // echoes "someMethod" 
+0

실제로 내가 바보짓을 한 후에 얼마나 바보인지 깨달았습니다. 질문을 던져서 ... 나는 처음에 올바른 호출이'$ person-> getName()'이라고 생각하고, 그것이 작동하지 않을 때, 나는 모두 해체되었다. 어쨌든, 나는 너를 수락하기 전에 11 분을 기다려야한다. 대답하지만 감사합니다. –

+0

확실한 것은 __call 마법 방법에 대한 설명을 추가하기 위해 내 대답을 약간 업데이트했습니다. –

관련 문제