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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: ООП. Наследование. Рекурсия.

Сообщения:  [1-10]   [11-13] 

 
 автор: MHz   (11.09.2011 в 23:51)   письмо автору
 
   для: aaanet   (11.09.2011 в 23:21)
 

Нет, не подойдет. В таком случае проще завести статическую переменную с флагом модификации, чтобы каждый объект мог изменять ее.

  Ответить  
 
 автор: aaanet   (11.09.2011 в 23:21)   письмо автору
 
   для: MHz   (11.09.2011 в 00:39)
 

Изменение данных - понятие растяжимое.
Может измениться часть строки, а может измениться количество чего либо.

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

func s($method, $var)
{
static $data[$method] = array();
if ($data[$method] == null) return class -> $method($var);
else return $data[$method];
}

Cxbnfnm d ytv dspjds b ,skb kb jyb djj,ot yt cjcnfdkztn ghj,ktvs

  Ответить  
 
 автор: MHz   (11.09.2011 в 20:35)   письмо автору
 
   для: cheops   (11.09.2011 в 19:47)
 

По сравнению с начальным состоянием, а начальное состояние будет устанавливаться через конструктор. Вот, на счет отследить изменения в новом классе, не знаю как организовать. Добавление ветвей будет только в самом классе.
Т.е. я себе представляю примерно так буду работать с классом:
<?php

class MyClass extends RecursiveArrayAccess
{
    public function 
__construct ()
    {
        
// получение данных
        
parent::__construct (массивы данных);
    }

    public function 
__destruct ()
    {
        
// если были изменения, записать их в файл
        
parent::toArray();
    }
}

?>

  Ответить  
 
 автор: cheops   (11.09.2011 в 19:47)   письмо автору
 
   для: MHz   (11.09.2011 в 17:12)
 

А изменилось по сравнению с чем, с каким состоянием? И нельзя ли в этом новом классе отследить изменения? Или добавление новых ветвей будет происходить в обход класса?

  Ответить  
 
 автор: MHz   (11.09.2011 в 17:12)   письмо автору
 
   для: cheops   (11.09.2011 в 15:11)
 

От этого класса будут наследоваться другие классы, использующие этот для хранения информации и более удобного обращения к ней. И вот в одном из таких классов мне нужно в деструкторе проверить изменилось ли что нибудь и если изменилось записать изменения в файл.

  Ответить  
 
 автор: cheops   (11.09.2011 в 15:11)   письмо автору
 
   для: MHz   (11.09.2011 в 13:27)
 

Опишите зачем ему это знать и для каких целей? Просто довольно сложно предложить решение, так как непонятно, как это должно выглядеть и при каких обстоятельствах... У меня сложилось мнение, что для того, чтобы нарастить дерево, все-равно придется изменять объекты (дополнять их вложенными). И как бы изменения настали, или есть какие-то эталлонные структуры, для которых нужно отслеживать изменения. В общем хотелось бы услышать больше подробностей о конечной задаче?

  Ответить  
 
 автор: MHz   (11.09.2011 в 13:27)   письмо автору
 
   для: cheops   (11.09.2011 в 13:14)
 

Так я смогу узнать изменялись ли данные в каком либо определенном объекте, а мне нужно узнать это именно от одного, родительского объекта. Он должен знать о модификация всех вложенных объектов. У меня была мысль сделать флаг статическим, чтобы все объекты могли обращаться к нему, но мне кажется это будет не совсем верно.

  Ответить  
 
 автор: Valick   (11.09.2011 в 13:17)   письмо автору
 
   для: cheops   (11.09.2011 в 13:14)
 

старый добрый "флаг"

  Ответить  
 
 автор: cheops   (11.09.2011 в 13:14)   письмо автору
 
   для: MHz   (11.09.2011 в 13:08)
 

Введите член класса $this->is_change, присвойте по умолчанию его значение равным false (в конструкторе). А при вызовах offsetSet() или offsetUnset() изменяйте его значение на true. Создайте метод is_change() и возвращайте при его вызове значение $this->is_change. Это позволит для каждого объекта (содержащего другие такие объекты или являющимися вложенными) узнать осуществлялись ли манипуляции при помощи offsetSet() или offsetUnset().

  Ответить  
 
 автор: MHz   (11.09.2011 в 13:08)   письмо автору
 
   для: MHz   (11.09.2011 в 13:04)
 

Т.е. в массиве $this->Data, помимо всего прочего может содержать еще несколько объектов этого же класса, вот как бы узнать были ли изменены данные во всех объектах.
Изменением данных можно считать вызов функций offsetSet() или offsetUnset()

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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