像" #if定义的预处理"用PHP

时间:2016-08-19 08:27:34

标签: php web compilation conditional preprocessor

我有以下问题:

我正在使用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(){}
}

但是我需要它在一个类中,它在那里不起作用......

亲切的问候!

1 个答案:

答案 0 :(得分:1)

在PHP中没有这样的预处理结构,因为PHP没有编译。但在PHP中,可以有条件地定义类。所以你可以分两步完成:

  1. 使用完整选项(第三个参数)定义类,但将这些敏感成员定义为protected而不是public

  2. 有条件地扩展课程,通过新名称和相应的签名提供对protected成员的访问权限。其他public成员不必明确提及,因为它们像往常一样继承

  3. 以下是一个例子:

    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();