PHP 如何在同一文件中调用和不调用函数时访问该函数?

PHP How to make a function accessible with and without the call in the same file?

对不起,如果我的问题不是很清楚,我不知道如何用英语表达我想说的。

这不是代码本身的问题,因为它的工作方式如图所示,但主要是对 PHP 的行为有疑问。

当我从另一个 php 文件调用函数时,它似乎读取函数本身,即 function loademp(){} 但是,如果我从 ajax 访问包含该函数的文件,它似乎需要调用该函数,即 loademp() 在同一个文件中。

因为我遇到了这个问题,所以我结束了这段代码,以使其从两个来源开始工作,在 if 条件中调用 ajax,否则它会从 php 文件:

<?php
     if ($_POST['runFunct']=="loademp"){ //call from ajax needs 'loademp()' to access the function;
        loademp();
     }

    function loademp(){ //loaded from another file apparently.
        try{
           //PDO code
           print_r(json_encode($results));
        }catch(PDOException $e){
            echo $e;
        }   
    }

我的其他文件是这样的:

require __DIR__.'loademp.php';
loademp();

有没有一种更实用的方法可以只针对这两种情况使用代码,而不根据来源进行任何条件调整?由于我无法在不使用 POST 变量的情况下从 ajax 调用特定函数,因此我想这是最好的情况,但如果您能指出有关它的良好做法,我将不胜感激.

我认为您在定义函数和执行函数之间存在混淆。

要定义一个函数,你可以这样写:

function say_hello_world() {
    echo "Hello, World!\n";
}

这不会立即导致任何事情发生,它只是定义如何做某事。在这种情况下,基本上就像在说:

Whenever I ask you to "say hello world", output to the screen "Hello, World!\n"

要让事情真正发生,你必须执行函数,它看起来像这样:

say_hello_world();

基本上就是说:

Do the actions I gave you for "say hello world"

在您的示例中,您的文件 'loademp.php' 定义了 一个名为 loademp 的函数 - 它说“每当我要求您 'loademp',这就是我要你做的”。在您的其他文件中,您包含该文件,因此定义了函数。然后,你 运行 用这条线:

loademp();

AJAX 调用与任何其他页面加载没有区别,因此您需要在那里做同样的事情 - 首先,定义 函数,或包括做的文件;然后,执行函数。

因此,与其直接调用 loademp.php,您可以调用 PHP 脚本,如 define_and_execute_loademp.php,并使用您提到的行:

require __DIR__.'loademp.php';
loademp();