无法重新声明功能(即使在die()之后;);

时间:2013-04-03 15:51:00

标签: php

这是我的代码:

    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 个答案:

答案 0 :(得分:1)

你的问题有点令人困惑,但我假设你想要不同的功能,不管他们是否在手机上。

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

如果你需要这个,因为页面彼此相关,那么只需调用不同的函数就是最简单的答案。

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

答案 1 :(得分:1)

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

header("Location: mobile_signup.php");

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

答案 2 :(得分:1)

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

记住php首先解析脚本然后执行它,因此首先声明函数,然后执行脚本以便解析后执行die()

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

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");
}

答案 3 :(得分:0)

die()将暂停正在运行的脚本。它不会阻止php解析器在遇到die()的行之后解析代码。 当你包含文件时...解析器将在包含代码后完全编译它并且die()在这里无关...

您必须检查功能是否已存在..或使用不同的功能名称