Empty()函数可能无法与PHP中的常量一起使用

时间:2011-10-10 13:53:52

标签: php

我已经看了一段时间,但无法弄清楚问题可能是什么:

我的代码:

<?php

    session_start();

    require "includes/config.php";
    require "includes/database.php";
    require "twitteroauth/twitteroauth.php";

    if(empty(CONSUMER_KEY) && empty(CONSUMER_SECRET))
    {
        exit("Please define Consumer Key and Consumer Secret Keys");
    }

    $connection = new TwitterOAuth(CONSUMER_KEY,CONSUMER_SECRET);
    $request_token = $connection->getRequestToken(OAUTH_CALLBACK);

    // Temporary credentials to make requests to Twitter
    $_SESSION["oauth_token"] = $request_token["oauth_token"];
    $_SESSION["oauth_token_secret"] = $request_token["oauth_token_secret"];

    switch ($connection->http_code)
    {
        case 200:
            $url = $connection->getAuthorizeURL($request_token);
            header("Location:".$url);
            break;
        default:
            die("Connection to Twitter failed. Please try again."); 
    }

?>

错误是:

 ## 
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM in /home/.../connect.php on line 9
 ##

第9行从

开始
if(empty(CONSUMER_KEY) && empty(CONSUMER_SECRET))
{
    exit("Please define Consumer Key and Consumer Secret Keys");
}

CONSUMER_KEY和CONSUMER_SECRET,它们是常量并在“includes / config.php”中定义,如下所示:

$config = parse_ini_file("config.ini");
define("CONSUMER_KEY",$config["TwitterAPI"]["Consumer_Key"]);
define("CONSUMER_SECRET",$config["TwitterAPI"]["Consumer_Secret"]);

5 个答案:

答案 0 :(得分:2)

使用defined代替empty来检查是否存在常量。 emptyisset函数检查变量是否存在。如果你想检查它是否为空,那么只需检查长度。

非常随意,大约2小时前我发生了这个确切的错误......

答案 1 :(得分:1)

empty()isset()都是语言结构。它们是功能。基本区别在于,使用普通函数时,该值将作为参数传递给函数。所以你在调用中放入的内容并不重要,它是发送给函数的最终评估响应。但是使用语言结构,它可以直接在大括号内部进行操作。没有“通过”,因为没有什么可以传递给它。

因此,empty()isset()仅用于检查变量。否则它无法真正检查变量,因为没有要检查的变量。一个限制,当然。但是很容易解决这个问题。

现在,在您的情况下,您正在尝试if (empty(CONSTANT))。那不行。但让我们看看我们如何做到这一点:

empty()基本上是isset($foo) && $foo的包装器。现在,isset()!is_defined($foo) && !is_null($foo)的包装器(其中is_defined是我刚刚编写的函数)。因此,如果我们希望empty喜欢使用非变量的行为,我们需要做的就是:

if (CONSTANT) {

<强>无论其

我强烈重新考虑你要做的事情。除了调试开关之外,您不应该以可能具有多个值的方式使用常量。如果它们可以有多个值(配置设置等),那么它们不是常量,而是伪装成常量的全局变量。就个人而言,我会将这些常量的使用重构为比全局变量更好地注入或管理的配置变量。

那么我使用常量是什么?对于那些真正恒定的事物。 define('DOZEN', 12)define('BITS_PER_BYTE', 8)define('DAYS_PER_WEEK', 7)。但我尽量避免不惜一切代价可以在以后调整的常数。对于这些用途,我会使用变量,因为它在语义上更正确,并且更容易使用该上下文。

答案 2 :(得分:0)

empty()是一个棘手的功能。 基本上空的只能用于变量。 你应该改为使用

if(defined('CONSUMER_KEY')&amp;&amp;(constant('CONSUMER_KEY'))){

}

答案 3 :(得分:0)

也许if(!isset(CONSUMER_KEY) && !isset(CONSUMER_SECRET))?希伯来语中的“PAAMAYIM NEKUDOTAYIM”是指双冒号(T_PAAMAYIM_NEKUDOTAYIM)。

答案 4 :(得分:-1)

looks like你需要将常量强制转换为布尔值:

if (((boolean) CONSUMER_KEY) && ((boolean) CONSUMER_SECRET))