Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
05:34, 14 февраля 2010

Пробный пост про "магические" свойства объектов в PHP

Недавно был проект с "русскими" и ISO датами. Все время делали функциями, а тут я решила написать объект и использовать "магические" свойства (properties).

Дело, оказалось, не хитрое: есть 2 "магических" метода __get() и __set(). Вот пример (извините за кривое форматирование, редактор yvision мена победил :)):

class MyDate {       protected $date;        // UNIX timestamp
function __get($name) {
switch($name) {
case 'ru':
return gmdate('d/m/Y',$this->date);
case 'iso':
return gmdate('Y-m-d',$this->date);
}
}
function __set($name,$value) {
switch($name) {
/* DD/MM/YYYY или DD.MM.YYYY */
case 'ru':
if (preg_match('@^([0-9]+)(\.|/)([0-9]+)(\.|/)([0-9]+)$@', $value, $matches)) {
list($all,$day,$sep,$month,$sep,$year) = $matches;
$this->date = gmmktime(0, 0, 0, $month, $day, $year);
return $this->date;
}
return FALSE;
/* YYYY-MM-DD */
case 'iso':
$this->date = strtotime($value);
return $this->date;
}
return FALSE;
}
}
date_default_timezone_set('GMT');
$date = new MyDate;

/* 3 строки с одинаковым результатом: */
$date->ru = '14.02.2010';
$date->ru = '14/02/2010';
$date->iso = '2010-02-14';

$date->ru; // 14/02/2010
$date->iso; // 2010-02-14
?>

Комментов в коде не особено много, так-что дайте знать если нужны разъяснения.

Еще дайте знать если пост показался интересным, продолжу!

0