1

这是我的代码:

    if (ismobile()) {
        // Include mobile version of this page
        require_once("mobile_signup.php");

        // Die so it will not include desktop version below mobile version
        die();
    }
    function this_is_a_function() {
        // Some code here
    }

   // Desktop version of code here

mobile_signup.php 中还声明了名为“this_is_a_function()”的函数。我怎样才能正确地做到这一点?我意识到有一个“function_exists('this_is_a_function')”,但是这两个代码中都有很多函数,所以对两个页面上的所有函数都这样做是不切实际的。

这个网站是预先建立的,我正试图把它变成一个适合移动设备的网站。因此,重写整个脚本并非易事。

4

4 回答 4

1

您的问题有点令人困惑,但是我假设您需要不同的功能,具体取决于它们是否在移动设备上。

要做到这一点,如果它们在移动设备上,只需要一个具有移动功能的页面,如果它们不在移动设备上,则需要一个单独的页面,并在主页上保留在移动设备和其他设备上使用的功能。这样它就不会遇到函数被定义两次的任何问题。

如果您因为页面彼此相关而需要此功能,那么只需调用不同的函数是最简单的答案。

再一次,我不确定上述哪一个是您的问题,因为您的问题对于每个页面做了什么、当前页面做了什么等不够详细。

于 2013-04-03T15:58:22.460 回答
1

如果您必须die()在页面开头包含您的移动版本文件后立即运行,并且仍然希望它能够正常运行,这意味着您的移动文件可以独立运行;因此重定向是一个更好的选择。

header("Location: mobile_signup.php");

die()确实会停止执行,但这并不意味着如果你在某个地方使用它,那么它下面的所有代码都会变得无用,它仍然会被 PHP 解析

于 2013-04-03T15:58:43.557 回答
1

所有函数在解析过程中都在 php 系统中注册,所以如果你的重复函数在动态和条件包含中,可以确保不会出现重复的函数,那么就可以了,但是如果它们在同一个脚本中或在一个执行过程中,然后它会给出你的错误,记住它的解析时间错误,

记住php先解析脚本然后执行,所以先声明函数,然后执行脚本die(),解析后执行,

在类似wordpress的环境中,函数在全局命名空间中被贴花,使用这种编码风格的最佳实践

if (!function_exists('HelloFunc'))
     function HelloFunc(){
         // do
     }

或者在您当前的代码中,我建议您使用这种模式

if (ismobile()) {
    // Include mobile version of this page
    require_once("mobile_signup.php");
} else {
    // Include mobile version of this page
    require_once("desktop_signup.php");
}
于 2013-04-03T16:02:47.267 回答
0

die() 将停止正在运行的脚本。它不会阻止 php 解析器在遇到 die() 的行之后解析代码。当您包含文件时...解析器将在包含代码后将其完全编译,而 die() 与此无关...

您必须检查函数是否已经存在..或使用不同的函数名称

于 2013-04-03T16:04:53.457 回答