我有以下问题:
我正在使用PHP编写SOAP服务器应用程序。但我必须以两种不同的方式做到这一点,一种用于外部使用(适用于所有人),另一种用于导入。导入应用程序只有更多的可能性,但它是相同的。
在C中我会写这样的东西(使用预处理器):
#ifdef INTERNAL
int funktion( int ok, double asdfg, const char *aaa){
#else
int funktion( int ok, double asdfg){
#endif
return 0;
}
我知道PHP中的函数defined()
,但它并没有真正做我想做的事情(我认为)。
但有什么类似的吗?
当然我可以编写两个不同的应用程序,但如果有这样的东西会非常好......
谢谢你的帮助!
编辑: 我知道通常可以编写像
这样的条件函数if(CST){
function asdf($asdf){
}
}
else{
function asdf(){}
}
但是我需要它在一个类中,它在那里不起作用......
亲切的问候!
答案 0 :(得分:1)
在PHP中没有这样的预处理结构,因为PHP没有编译。但在PHP中,可以有条件地定义类。所以你可以分两步完成:
使用完整选项(第三个参数)定义类,但将这些敏感成员定义为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();