두 클래스가 있습니다. 주소와 학생이 있습니다. 거리, 도시 및 주 속성을 검색하고 학생 인스턴스를 사용하여 할당 할 수 있도록 __call() 함수를 코딩해야합니다.
이
내가 한 출력 (I은 __call()를 코딩하지만 지금까지 단 출력의 마지막 줄 작동) :John Smith
50
, ,
The address has been updated:
50 second street, Palo Alto, CA
출력의 세 번째 행은 다음과 같습니다
100 main street, Sunnyvale, CA
그리고 그 곳에서 스택을 얻었습니다.
여기 내 코드입니다. 나는 어떤 도움을 주셔서 감사합니다.
<?php
class Address {
private $street;
private $city;
private $state;
function __construct($s, $c, $st) {
$this->street = $s;
$this->city = $c;
$this->state = $st;
}
function setCity($c) {
$this->city = $c;
}
function getCity() {
return $this->city;
}
function setState($s) {
$this->state = $s;
}
function getState() {
return $this->state;
}
function setStreet($s) {
$this->street = $s;
}
function getStreet() {
return $this->street;
}
}
class Student {
private $name;
private $age;
private $address;
function __construct($n, $a, Address $address) {
$this->name = $n;
$this->age = $a;
$this->address = $address;
}
function getName() {
return ucwords($this->name);
}
function getAge() {
return $this->age;
}
function setName($n) {
$this->name = $n;
}
function setAge($a) {
$this->age = $a;
}
function __set($name, $value) {
$set = "set".ucfirst($name);
$this->$set($value);
}
function __get($name) {
$get = "get".ucfirst($name);
return $this->$get();
}
function __call($method, $arguments) {
// Need more code
$mode = substr($method,0,3);
$var = strtolower(substr($method,3));
if ($mode =='get'){
if (isset($this -> $var)){
return $this ->$var;
}
} elseif ($mode == 'set') {
$this ->$var = $arguments[0];
}
}
}
$s = new Student('john smith', 50, '100 main street', 'Sunnyvale', 'CA');
echo $s->name;
echo "\n";
echo $s->age;
echo "\n";
echo $s->address->street . ", " . $s->address->city . ", " . $s->address->state;
echo "\n";
$s->street = "50 second street";
$s->city = "Palo Alto";
$s->state = "CA";
echo "The address has been updated:\n";
echo $s->street . ", " . $s->city . ", " . $s->state;
//print_r($s);
?>
가치가 있습니다. Student에 get/setAddress()를 추가 한 다음 getter/setter를 호출하거나 프록시 메소드를 Student에 추가하십시오. – Gordon