18

我有以下代码

define("SCRIPT_URL", "");
function ifScriptFolder() {
    if(isset(SCRIPT_URL) && !empty(SCRIPT_URL)) {
        echo "/".SCRIPT_URL."/";
    } else {
        echo "/";
    }
}

但它给了我以下错误:

Parse error: syntax error, unexpected ')', expecting :: (T_PAAMAYIM_NEKUDOTAYIM) in *(path)* on line 3

谁能看到这里出了什么问题或如何解决?

4

3 回答 3

13

如果您尝试确定常量是否存在,请尝试使用defined()or constant(), not isset()


来自php.net

功能 defined()

如果已定义由 name 给出的命名常量,则返回 TRUE,否则返回 FALSE。

功能 constant()

返回常量的值,如果未定义常量,则返回 NULL。


固定功能:

function ifScriptFolder() {
    echo defined('SCRIPT_URL') ? "/" . constant('SCRIPT_URL') . "/" : "/"
}

升级版:

该函数是一个更好的解决方案,因为如果未定义常量defined(),它将不会发出。E_WARNING

于 2013-09-18T04:06:52.757 回答
5

PHP常量不是变量,所以不要使用issetempty检查它们。

相反,您可以使用defined

defined('SCRIPT_URL')

如果字段已定义,则返回布尔值,如果是,则对值进行标准比较以检查它是否为真。

还值得注意(供将来参考)这isset不是常规功能;它是一种“语言结构”,不能用于除变量之外的任何东西(即不能用于函数的返回值)。empty直到 PHP 5.5 也一样。

于 2013-09-18T04:07:46.893 回答
3

如果要查看变量是否存在,请使用isset(),并且defined()仅适用于常量。

如果要检查常量是否为空,则不能使用:

if (empty(B)) // syntax error
if (empty(constant('B'))) // fatal error

您可以将常量转换为布尔值:

if((boolean) A) {
}

因此,您可以将代码更改为:

<?php
define("SCRIPT_URL", "");
function ifScriptFolder() {
    if(defined('SCRIPT_URL') && !((boolean)SCRIPT_URL)) {
        echo "/".SCRIPT_URL."/";
    } else {
        echo "/";
    }
}
于 2013-09-18T04:14:43.240 回答