【问题标题】:Parse error: syntax error, unexpected ')', expecting :: (T_PAAMAYIM_NEKUDOTAYIM) [duplicate]解析错误:语法错误,意外')',期待 :: (T_PAAMAYIM_NEKUDOTAYIM) [重复]
【发布时间】:2013-09-22 16:54:55
【问题描述】:

我有以下代码

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

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

【问题讨论】:

  • 我发布一个答案来展示如何判断一个常量为空。请看一下。

标签: php function constants


【解决方案1】:

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


来自php.net

函数 defined():

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

函数 constant():

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


固定功能:

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

UPD:

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

【讨论】:

  • 同意函数应该使用。但是,问题是关于解析或编译错误,即脚本甚至没有运行,那么这些函数如何提供帮助?
  • @fuzzybee 这个问题是关于滥用和误解使用isset() 的常量。结果 - 解析错误。
【解决方案2】:

如果要查看变量是否存在,请使用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 "/";
    }
}

【讨论】:

  • defined() 需要字符串参数:defined('SCRIPT_URL'),而不是 defined(SCRIPT_URL)
  • 对不起,你是对的。我更新了答案,tks。
【解决方案3】:

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

相反,您可以使用defined:

defined('SCRIPT_URL')

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

还有一点值得注意(供将来参考)isset 不是常规函数;它是一种“语言结构”,不能用于除变量之外的任何东西(即不能用于函数的返回值)。在 PHP 5.5 之前与 empty 相同。

【讨论】:

  • 感谢工作!以前不必检查定义的常量。 :)。当它允许我时会接受。
猜你喜欢
  • 2013-12-15
  • 2013-06-28
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多