|
|
|
| вот есть абстрактный класс parser есть куча его реализаций site1Parser , site2Parser и т.д
чета я непойму как на странице все это соедениеть и работать не с конкретной реализацией так как их много будет а с абст.классом или интерфейсом. вообщем как сообрать вооедино. кто понял откликнитесь. | |
|
|
|
|
|
|
|
для: alph[p]a
(17.11.2010 в 16:05)
| | С абстрактными классами и интерфейсами на прямую работать нельзя, они просто должны реализовывать общий функционал или описание методов перед их реализацией.
У вас заведомо неправильный подход к ООП. | |
|
|
|
|
|
|
|
для: @ndry
(17.11.2010 в 16:54)
| | собс..зачем они нужны тогда? | |
|
|
|
|
|
|
|
для: Alph[p]a
(17.11.2010 в 19:08)
| | Я уже написал - реализация общей для всех их наследников логики. | |
|
|
|
|
|
|
|
для: Alph[p]a
(17.11.2010 в 19:08)
| | Есть ноутбук - asus.
Есть модель - m50.
На все серии этой модели одни и теже корпуса производят.
Но на каждые серии (m50vm, m50sa,m50sr и т.д.) свои комплектации под корпус (в одной серии есть одно, в другой - другое, что-то общее также) | |
|
|
|
|
|
|
|
для: Tonik992
(17.11.2010 в 21:25)
| | Некорректный пример. На разных моделях может быть, а может не быть каких-то входов, к примеру.
А абстрактные классы и методоы как раз и создают для того, чтобы в потомках не забыли реализовать эти методы. | |
|
|
|
|
|
|
|
для: neadekvat
(17.11.2010 в 21:54)
| | Корпус один, а входы и выходы где-то есть, а где-то нет | |
|
|
|
|
|
|
|
для: alph[p]a
(17.11.2010 в 16:05)
| | Ситуация, которая часто встречается. По ходу дела поймете, для чего абстрактные классы.
Есть абстрактный класс, задача которого - извлечь некие данные из файла:
<?php
abstract class Parser{
abstract function getPage(); //этот метод занимается извлечением нужной информации
}
?>
|
Файлы могут быть разного формата - txt,xml...
Поэтому извлекать информацию из этих файлов будем по-разному.
Для этого создаем два дочерних класса:
<?php
class textParser extends Parser{
function getPage(){
//парсим текстовый файл
};
}
class xmlParser extends Parser{
function getPage(){
//парсим xml-файл
};
}
?>
|
Допустим, понадобилось нам не только извлечь данные, но и положить их в базу.
Для этого создаем класс dataInDatabase, методу этого класса мы передаем объект типа Parser, этот метод не должен точно знать, какой объект он получил, главное, чтобы это был потомок Parser, потому как в Parser реализован метод getPage():
<?php
class dataInDatabase{
function pageIntoDatabase(Parser $object){
//распарсили данные
$object->getPage();
//кладем данные в базу
}
}
?>
|
И далее создаем объект, который может работать с любым типом данных:
<?php
$obj = new dataInDatabase();
//объект может работать с текстовым файлом(как он с ним работает, это от нас скрыто - инкапсуляция)
$obj->pageIntoDatabase(new textParser);
//объект может работать с xml-файлом
$obj->pageIntoDatabase(new xmlParser);
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(17.11.2010 в 23:50)
| | Вроде все ясно..но
вот есть у меня индекс.пхп я подключаю интерфейс парсера.. и мне нужно создавать реальный класс для работы,.. он написан в файле...как мне сделать?
не буде я же в главном файле писать
<?php
class site1Parser extends Parser {
// *****
} ?>
|
и все это дело в switch загонять!!?! как тогда?! | |
|
|
|
|
|
|
|
для: alph[p]a
(18.11.2010 в 08:00)
| | >не буде я же в главном файле писать
нет, конечно.
Я делаю так.
В индексном файле подключаю все файлы с классами:
<?php
foreach (glob(CLASSES_PATH . "*.php") as $filename) {
require_once($filename);
}
?>
|
Т.е. ваше <?php
class site1Parser extends Parser {
// *****
} ?>
будет, допустим, в файле classes/site1Parser.php
Можно подключать не все классы, а классы, принадлежащие какому-то определенному пространству имен - то, которое необходимо при загрузке системы. Т.е. вам, допустим, при загрузке системы нужны файлы классов, которые заканчиваются на Parser, тогда можно и так сделать:
<?php
foreach (glob(CLASSES_PATH . "*Parser.php") as $filename) {
require_once($filename);
}
?>
|
Тогда все остальные файлы классов подключаются позже.
Подключили необходимые классы - а далее создаем объекты по мере необходимости.
Что вы хотите сделать со switch я не поняла. Расскажите простым языком. | |
|
|
|
|
|
|
|
для: Лена
(18.11.2010 в 12:16)
| | а почему бы не заюзать __autoload? | |
|
|
|
|
|
|
|
для: psychomc
(18.11.2010 в 12:30)
| | А если название класса не совпадет с названием файла?
Если в одном файле будет несколько классов, обеспечивающих общую функциональность? | |
|
|
|
|
|
|
|
для: Лена
(18.11.2010 в 17:09)
| | думаю что это всё бессмысленно.
как и загрузка сразу всех классов где-нибудь в конфиге, большая часть из которых никак в контроллере не используются.
p.s ведь такие функции не зря придумывают. хотя конечно у каждого своё видение... | |
|
|
|