Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: __set() в конструкторе
 
 автор: denok   (19.11.2007 в 00:36)   письмо автору
 
 

Здрасти всем!!!

такой вот вопрос.
есть класс:

<?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() в кострукторе класса?

   
 
 автор: exp   (19.11.2007 в 05:41)   письмо автору
 
   для: denok   (19.11.2007 в 00:36)
 

проще всего наверное просто сделать внутри __construct проверку
<? 
if ($age 150 || $age $this->age =  "указан неверный возраст";
else 
$this->age $age;
внутри __construct тоже можно вызвать методы например self::getInfo()
помоему __set() для более замысловатого чего-то

   
 
 автор: cheops   (19.11.2007 в 12:18)   письмо автору
 
   для: denok   (19.11.2007 в 00:36)
 

Оформите проверку возраста в виде отдельного закрытого метода, который вызывайте и в конструкторе и в методе __set().

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования