Познал изумительнейшую весчь, которая позволила сотворить просто невероятные и столь желанные раньше преобразования в коде.
$city = new City(1);
$country = new Country($city->idcountry);
$country = new Country($city->idcountry);
На первый взгляд все замечательно. Но а теперь если я скажу, что у объекта на самом деле свойства idcountry нет? Вырезав из него все лишнее, имеем такой дамп:
City Object
(
[TABLE:protected] => city
[db:protected] => MyDB Object
[all_fields:protected] => Array
(
[idcity] => 1
[name] => Kiev
[idcountry] => 2
)
[id:protected] => 1
[field_list:protected] => Array
(
[idcity] => Array
(
[type] => int
[isnull] => NO
[extra] => auto_increment
)
[name] => Array
(
[type] => varchar
[isnull] => NO
[extra] =>
)
[idcountry] => Array
(
[type] => int
[isnull] => NO
[extra] =>
)
)
)
(
[TABLE:protected] => city
[db:protected] => MyDB Object
[all_fields:protected] => Array
(
[idcity] => 1
[name] => Kiev
[idcountry] => 2
)
[id:protected] => 1
[field_list:protected] => Array
(
[idcity] => Array
(
[type] => int
[isnull] => NO
[extra] => auto_increment
)
[name] => Array
(
[type] => varchar
[isnull] => NO
[extra] =>
)
[idcountry] => Array
(
[type] => int
[isnull] => NO
[extra] =>
)
)
)
А вот как выглядит код (только для этих методов):
protected function __get($var)
{
if (isset($this->all_fields[$var]))
return $this->all_fields[$var];
else
return null;
}
protected function __set($var, $val)
{
if($this->id && $var !="id$this->TABLE")
{
if(array_key_exists($var,$this->field_list))
{
if($this->db->Query("UPDATE `$this->TABLE`
SET `$var` = '$val'
WHERE `id$this->TABLE` = '$this->id'
LIMIT 1"))
return $this->all_fields[$var] = $val;
else
return false;
}
return $this->all_fields[$var] = $val;
}
return false;
}
{
if (isset($this->all_fields[$var]))
return $this->all_fields[$var];
else
return null;
}
protected function __set($var, $val)
{
if($this->id && $var !="id$this->TABLE")
{
if(array_key_exists($var,$this->field_list))
{
if($this->db->Query("UPDATE `$this->TABLE`
SET `$var` = '$val'
WHERE `id$this->TABLE` = '$this->id'
LIMIT 1"))
return $this->all_fields[$var] = $val;
else
return false;
}
return $this->all_fields[$var] = $val;
}
return false;
}
Вот такой скромный пример вышел. Итого мы при присвоении свойству (имя которого совпадает с существующей колонкой в БД) значения сразу записываем его в БД. Мелочь, но приятно.
Добрый день, Дмитрий!
Свяжитесь со мной, есть предметный разговор к Вам по вопросам сотрудничества.
Мой ICQ 79255145
В сети бываю после 15-16 по Киеву
Александр
Александр
July 3rd, 2006
> у объекта на самом деле свойства ifcountry нет
Опечатку поправьте, idcountry
Полезный пост, спасибо. Как раз в этом разбираюсь.
Вторая ссылка в гугле по запросу php __get(), между прочим.
Uznick
July 20th, 2006
ifcountry -> idcountry
Fixed!
dm
August 1st, 2006
а к чему эти все теги хтмл, мешают читать до ужаса, можно както попроавить чтоб это читабельно было?
zverushka
January 17th, 2007
Спасибо, поправил. Скоро все посты поисправляю и переделаю механизм подсветки синтаксиса.
dm
January 17th, 2007