PassExcel
Новичок
Здравствуйте. Пишу удобную обертку под айпи плеска (панелька на хостинг).
Но, в разных версиях панельки, некоторые айпи параметры - разные.
Отталкиваюсь от мыслей:
1) Написать главный класс и все методы реализовать в нем.
2) Написать дополнительные классы, на каждую версию (например разница кода только для мажорных версий)
3) Написать класс оболочку, которая при вызове смотрит сначала метод у дополнительных классов, и если его нет, использует метод основного класса.
Вот собственно, чтобы было сделано:
Непосредственно сам вызов
Класс оболочка:
Основной класс
Класс для седьмой версии
В Plesk_main я описываю все методы по дефолту.
В Plesk_7 - я описываю только различающиеся методы. Что в отличии от паттерна стратегии, позволяет не копировать остальные идентичные методы.
На данном этапе проектирования, все работает как надо. Поэтому прошу ваших советов и критики. Будет ли эта схема гибкой в будующем? Вдруг это очередной велосипед и уже есть давно готовые и проверенные решения в виде паттернов?
Но, в разных версиях панельки, некоторые айпи параметры - разные.
Отталкиваюсь от мыслей:
1) Написать главный класс и все методы реализовать в нем.
2) Написать дополнительные классы, на каждую версию (например разница кода только для мажорных версий)
3) Написать класс оболочку, которая при вызове смотрит сначала метод у дополнительных классов, и если его нет, использует метод основного класса.
Вот собственно, чтобы было сделано:
Непосредственно сам вызов
PHP:
<?php
..//include
$plesk = new Plesk();
$plesk->setVersion(7);
$plesk->login();
?>
PHP:
<?php
Class Plesk {
private $subclass = null;
private $mainclass = null;
function __construct() {
$class = __CLASS__.'_main';
$this->mainclass = new $class();
}
function setVersion($version) {
if (class_exists(__CLASS__.'_'.$version)) {
$class = __CLASS__.'_'.$version;
$this->subclass = new $class();
}
}
function __call($method, $arg) {
if ($this->subclass !== null && method_exists($this->subclass, $method)) {
return $this->subclass->$method($arg);
} elseif (method_exists($this->mainclass, $method)) {
return $this->mainclass->$method($arg);
} else {
return false;
}
}
}
?>
Основной класс
PHP:
<?php
class Plesk_main extends Plesk {
function __construct() {
}
function login($data) {
echo('main login');
}
}
?>
PHP:
<?php
class Plesk_7 extends Plesk {
function __construct() {
}
function login($data) {
echo('login for version [7]');
}
}
?>
В Plesk_main я описываю все методы по дефолту.
В Plesk_7 - я описываю только различающиеся методы. Что в отличии от паттерна стратегии, позволяет не копировать остальные идентичные методы.
На данном этапе проектирования, все работает как надо. Поэтому прошу ваших советов и критики. Будет ли эта схема гибкой в будующем? Вдруг это очередной велосипед и уже есть давно готовые и проверенные решения в виде паттернов?