web — предварительная обработка, как & quot; #ifопределена & quot; в переполнении стека

У меня следующий вопрос:

Я программирую приложение сервера SOAP с помощью PHP. Но я должен сделать это двумя разными способами: один для внешнего использования (для всех людей), а другой только для импорта. И приложение для импорта имеет чуть больше возможностей, но в остальном оно такое же.

В C я бы написал что-то вроде этого (используя препроцессор):

#ifdef INTERNAL
int funktion( int ok, double asdfg, const char *aaa){
#else
int funktion( int ok, double asdfg){
#endif
return 0;
}

Я знаю функцию defined() в PHP, но он на самом деле не делает то, что я хочу сделать (я думаю).
Но есть ли что-то симолярное?

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

Спасибо за помощь!

РЕДАКТИРОВАТЬ:
Я знаю что обычно можно написать условные функции типа

if(CST){
function asdf($asdf){
}
}
else{
function asdf(){}
}

но мне нужно это в классе, и там это не работает …

С уважением!

1

Решение

В PHP нет таких конструкций предварительной обработки, так как PHP не компилируется. Но в PHP классы могут быть определены условно. Таким образом, вы можете сделать это в два этапа:

  1. определить класс с полным параметром (3-й аргумент), но определить эти чувствительные элементы как protected вместо public

  2. расширить класс условно, предоставляя доступ к protected участников через новое имя и с соответствующей подписью. Другой public члены не должны быть упомянуты явно, поскольку они наследуются как обычно

Вот пример:

define('INTERNAL', false);

// Define complete class, but with members set to protected
// when they have constraints depending on INT/EXT access
class _myClass {
protected function _funktion ($ok, $str, $id = -1) {
echo  "arguments: $ok,$str,$id";
}
public function otherFunc() {
echo "other func";
}
}

// Define myClass conditionally
if (INTERNAL) {
class myClass extends _myClass{
// give public access to protected inherited method
public function funktion ($ok, $str, $id) {
$this->_funktion ($ok, $str, $id);
}
}
} else {
class myClass extends _myClass{
// give public access to protected inherited method, but only
// with 2 parameters
function funktion ($ok, $str) {
$this->_funktion ($ok, $str);
}
}
}$obj = new myClass();

// if signature has 2 arguments, third is ignored
$obj->funktion(1, 'test', 3);
// other methods are availble
$obj->otherFunc();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]