我有以下代码
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
任何人都可以看到这里出了什么问题或者如何修复它?
答案 0 :(得分:11)
如果您尝试确定是否存在常量,请尝试使用defined()
或constant()
,而不是isset()
。
来自php.net:
功能 defined()
:
如果已定义name给出的命名常量,则返回TRUE,否则返回FALSE。
功能 constant()
:
返回常量的值,如果未定义常量,则返回NULL。
固定功能:
function ifScriptFolder() {
echo defined('SCRIPT_URL') ? "/" . constant('SCRIPT_URL') . "/" : "/"
}
<强> UPD:强>
defined()
函数是一个更好的解决方案,因为如果未定义常量,它将不会发出E_WARNING
。
答案 1 :(得分:5)
PHP constants不是变量,因此您不能使用isset
或empty
来检查它们。
相反,您可以使用defined
:
defined('SCRIPT_URL')
如果字段已定义则返回布尔值,如果是,则对值进行标准比较以检查它是否真实。
值得注意的是(以后参考)isset
不是常规函数;它是一种“语言结构”,不能用于除变量之外的任何东西(即不能用于函数的返回值)。在PHP 5.5之前与empty
相同。
答案 2 :(得分: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 "/";
}
}