Fork me on GitHub

The WebDevil

Enjoy development

Познал изумительнейшую весчь, которая позволила сотворить просто невероятные и столь желанные раньше преобразования в коде.

$city = new City(1);
$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] =>
    )
  )
)

А вот как выглядит код (только для этих методов):

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;
}

Вот такой скромный пример вышел. Итого мы при присвоении свойству (имя которого совпадает с существующей колонкой в БД) значения сразу записываем его в БД. Мелочь, но приятно.

5 Responses to “Перегрузка операторов (__set, __get)”

  1. Добрый день, Дмитрий!

    Свяжитесь со мной, есть предметный разговор к Вам по вопросам сотрудничества.

    Мой ICQ 79255145
    В сети бываю после 15-16 по Киеву

    Александр

    Александр

  2. > у объекта на самом деле свойства ifcountry нет

    Опечатку поправьте, idcountry :)

    Полезный пост, спасибо. Как раз в этом разбираюсь.

    Вторая ссылка в гугле по запросу php __get(), между прочим.

    Uznick

  3. ifcountry -> idcountry
    Fixed!

    dm

  4. а к чему эти все теги хтмл, мешают читать до ужаса, можно както попроавить чтоб это читабельно было?

    zverushka

  5. Спасибо, поправил. Скоро все посты поисправляю и переделаю механизм подсветки синтаксиса.

    dm

Leave a Reply