Помогите с реализацией объектной модели

MasterSID

Новичок
Помогите с реализацией объектной модели

Посоветуйте как на php4 грамотно реализовать следующую связь.

Есть два класса:

1. Определяет хранилище информации:
PHP:
class DataStorage 
{ 
    var $path; 
     
    function DataStorage($path) 
    { 
        $this->path = $path; 
    } 
     
}
2. Использует хранилище
PHP:
class Foo 
{ 
    var $data_storage = array(); 

    function setDataStorage($path) 
    { 
        $this->data_storage[] = new DataStorage($path); 
    } 
}
Теперь нужно осуществить проверку правильности пути - is_dir($path); С точки зрения задумки разумнее было бы инкапсулировать ее в классе DataStorage, чтобы хранилище не было привязано к конкретной реализации, но тогда как следует изменить реализацию Foo::setDataStorage() чтобы игнорировались невалидные хранилища?

У меня пока только идея отказаться от конструктора, превратив его в метод, возвращающий true/false. Грамотно ли это будет или есть более элегантное решение?
 

die_hard

Новичок
Re: Помогите с реализацией объектной модели

Автор оригинала: MasterSID
Посоветуйте как на php4 грамотно реализовать следующую связь.

Есть два класса:

1. Определяет хранилище информации:
PHP:
class DataStorage 
{ 
    var $path; 
     
    function DataStorage($path) 
    { 
        $this->path = $path; 
    } 
     
}
2. Использует хранилище
PHP:
class Foo 
{ 
    var $data_storage = array(); 

    function setDataStorage($path) 
    { 
        $this->data_storage[] = new DataStorage($path); 
    } 
}
Теперь нужно осуществить проверку правильности пути - is_dir($path); С точки зрения задумки разумнее было бы инкапсулировать ее в классе DataStorage, чтобы хранилище не было привязано к конкретной реализации, но тогда как следует изменить реализацию Foo::setDataStorage() чтобы игнорировались невалидные хранилища?

У меня пока только идея отказаться от конструктора, превратив его в метод, возвращающий true/false. Грамотно ли это будет или есть более элегантное решение?
Во-первых, то что вы назвали "setDataStorage" на самом деле "AddDataStorage"
Во-вторых, можно туда сразу объект "DataStorage" передавать с преварительной проверкой.
В-третьих, вот так вот лучше наверное.
PHP:
class DataStorage 
{ 
    var $path; 
     
    function DataStorage() 
    { 
        $this->path = null; 
    } 
     function Init($path)
    {
         if(!is_dir($path)) return false;
         $this->path = $path;
         return true;
    }
}
2. Использует хранилище
PHP:
class Foo 
{ 
    var $data_storage; 
    
    function Foo()
    {
         $this->data_storage = array(); 
    }
    
    function AddDataStorage($data_storage) 
    { 
        $this->data_storage[] = $data_storage;
    } 
}
Думаю что-то полезно будет
Но ессно надо знать куда это все будет использоваться чтобы что-то полезное предлагать... а пока надеюсь я помог.
 

MasterSID

Новичок
А разьве не лучше будет, если инкапсулировать все проверки внутри AddDataStorage? А то так код связанный с этим методом будет выноситься за его пределы.

Ну в общем-то я идею главную понял, как я и говорил, стоит определять параметры объекта не через конструктор, спасибо
 

bgm

 
die_hard Цитирую: The above example calls the function example() in class A, but there is no object of class A...
 

die_hard

Новичок
bgm - я читать умею. Фишка в том что ссылка тут не в тему потому что судя по всему вы вообще не поняли что хотел топикстартер.

И, если я правильно понял, топикстартер уже получил то, что хотел.
За сим откланиваюсь %-)
 

bgm

 
die_hard
Фишка в том, что валидность параметра можно проверить методом класса _до_создания_экземпляра_класса_.
 

die_hard

Новичок
bgm да ты что, спасибо что прояснил! Чтобы я без тебя делал?!

Это уже не суть важные детали разработки. Думаю, тему можно закрывать.
 
Сверху