|
|
|
| Здрасти всем!!!
такой вот вопрос.
есть класс:
<?php
class person {
private $name;
private $age;
public function __construct($name, $age = 18) {
$this->name = $name;
$this->age = $age;
}
public function getInfo() {
return "Имя: {$this->name}, возраст: {$this->age}.";
}
private function __set($prop, $value) {
if ( $prop == "age" ) {
$this->$prop = ( $value >= 18 && $value <= 60 )
? $value
: "указан неверный возраст";
}
else $this->$prop = $value;
}
}
$person_1 = new person("John Doe", 25);
$person_2 = new person("граф Калиостро");
$person_2->age = 2000;
print $person_1->getInfo();
print "<br>";
print $person_2->getInfo();
?>
|
все работает нормально, вывод такой, какой нужен:
Имя: John Doe, возраст: 25.
Имя: граф Калиостро, возраст: Указан неверный возраст.
но если сделать так:
$person_1 = new person("John Doe", 25);
$person_2 = new person("граф Калиостро", 2000);
print $person_1->getInfo();
print "<br>";
print $person_2->getInfo();
|
то граф Калиостро всех обманет:
Имя: John Doe, возраст: 25.
Имя: граф Калиостро, возраст: 2000.
вопрос такой. как избежать явного вызова __set() в кострукторе класса? | |
|
|
|
|
|
|
|
для: denok
(19.11.2007 в 00:36)
| | проще всего наверное просто сделать внутри __construct проверку
<?
if ($age > 150 || $age < 5 ) $this->age = "указан неверный возраст";
else $this->age = $age;
| внутри __construct тоже можно вызвать методы например self::getInfo()
помоему __set() для более замысловатого чего-то | |
|
|
|
|
|
|
|
для: denok
(19.11.2007 в 00:36)
| | Оформите проверку возраста в виде отдельного закрытого метода, который вызывайте и в конструкторе и в методе __set(). | |
|
|
|