[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: __get и __set
Панч
Начал изучать ООП, в учебнике есть пример.



<?

class
PropertyObject{

private $_properties = array(
'name' => null,
'dateofbirth' => null
);

function __get($propertyName){

if(!array_key_exists($propertyName, $this -> _properties)){
throw new Exception('Недопустимое значение свойства');
}

if(method_exists($this, 'get' . $propertyName)){
return call_user_func(array($this, 'get' . $propertyName));
}else{
return $this -> _properties[$propertyName];
}

}


function __set($propertyName, $value){

if(!array_key_exists($propertyName, $this -> _properties)){
throw new Exception('Недопустимое значение свойства');
}

if(method_exists($this, 'set' . $propertyName)){
return call_user_func(array($this, 'set' . $propertyName), $value);
}else{
$this -> _properties[$propertyName] = $value;
}

}


function setDateOfBirth($dob){

if(strtotime($dob) == -1){
throw new Exception('Недопустимое значение даты рождения');
}

$this -> _properties['dateofbirth'] = $dob;

}

function sayHello(){

print "Привет! Меня зовут {$this -> name}. Я родился {$this -> dateofbirth}";

}

}


?>




<?

$obj = new PropertyObject();

$obj -> name = 'Лёха';

$obj -> dateofbirth = '05.10.1987';

$obj -> sayHello();

?>



Не понятно, что за функции __set и __get. С виду пользовательские, а работают как встроенные.

Объясните пожалуйста как они работают?



Спустя 2 минуты, 30 секунд (7.04.2010 - 22:30) twin написал(а):
Как раз только написал smile.gif

Спустя 13 часов, 50 минут, 47 секунд (8.04.2010 - 12:20) Панч написал(а):
Спасибо за ссылку, сразу все прояснилось и лишние вопросы отпали =)

Спустя 28 дней, 28 минут, 47 секунд (6.05.2010 - 12:49) b00tanik написал(а):
А что у этих методов с быстродействием? Интересовался кто?

Спустя 12 минут, 58 секунд (6.05.2010 - 13:02) twin написал(а):
Хреново. У магических методов, да и вообще у ООПшных фишек в PHP (таких как исключения и иже с ними) вообще с быстродействием напряг.
Приходится платить за крутизну.
Правда не мне)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.