У меня следующий вопрос:
Я программирую приложение сервера 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(){}
}
но мне нужно это в классе, и там это не работает …
С уважением!
В PHP нет таких конструкций предварительной обработки, так как PHP не компилируется. Но в PHP классы могут быть определены условно. Таким образом, вы можете сделать это в два этапа:
определить класс с полным параметром (3-й аргумент), но определить эти чувствительные элементы как protected
вместо public
расширить класс условно, предоставляя доступ к 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();
Других решений пока нет …