代码之家  ›  专栏  ›  技术社区  ›  Abs

包括函数和调用

php
  •  1
  • Abs  · 技术社区  · 16 年前

    我只想确认一件事,因为我的理解已经被我在另一台服务器上做的测试动摇了,我希望某些东西可以工作,但它没有。请参阅下面代码中的问题。

    <?php
    
    function xyz(){
    } 
    
    include("test.php");
    /*
    * A function in the above include checks if the function abc function_exists(). 
    * Will it return a true? What about for xyz?
    */
    
    function abc(){
    }
    
    ?>
    

    谢谢大家

    5 回复  |  直到 16 年前
        1
  •  3
  •   NullUserException Mark Roddy    16 年前

    您可以将includes看作是将整个文件复制并粘贴到 include

    function xyz(){
    } 
    
    var_dump(function_exists('xyz'));
    var_dump(function_exists('abc'));
    
    function abc(){
    }
    

    这两个都是真的,如图所示 here 1 ).

    1 关于这方面的例外情况,请参见nikic的回答。

        2
  •  2
  •   NikiC    16 年前

    在PHP中,函数在被使用或引用之前不需要声明。只有一个例外:如果函数是有条件定义的(在 if 语句)只有在 如果 语句已执行。(但这是合乎逻辑的,因为PHP不知道 如果

    看到了吗 manual :

    函数之前不需要定义 如下面两个例子所示。

    当函数在 有条件的方式,例如 举例说明。它的定义必须是 在被调用之前处理。

        3
  •  0
  •   Alec    16 年前

    xyz 会存在,但是 abc 不会。 function_exists() .

        4
  •  0
  •   Cedric    16 年前

    只要我检查abc的存在,它就存在。这可能是因为PHP引擎可能会先解析代码并创建所有函数,然后再执行其他操作:它可能会读取带有“function foobar()”的所有行,然后执行其余的代码

        5
  •  0
  •   Alin P.    16 年前

    看起来,即使在检查代码之后声明函数,也会发现该函数存在。

    <?php
    
    echo function_exists('abc').PHP_EOL;
    echo function_exists('xyz').PHP_EOL;
    
    function xyz(){
    } 
    
    function abc(){
    }
    
    ?>
    

    我不知道为什么会发生这种情况,但这可能是因为PHP代码在运行之前被编译成内部格式。因此,所有函数都将在编译之后和运行之前创建。

    当做, 阿林

    推荐文章