【问题标题】:PHP Error: Function name must be a stringPHP 错误:函数名必须是字符串
【发布时间】:2025-12-28 03:10:16
【问题描述】:

我在 PHP 代码的顶部添加了以下几行,但它会引发错误:

致命错误:函数名称必须是 /home/reg.php 第 2 行中的字符串

<?php
if ($_COOKIE('CaptchaResponseValue') == "false")
{
    header('location:index.php');
    return;
}
?>

我试过了:$_COOKIE("CaptchaResponseValue")。 cookie 已成功设置并且可用。为什么我在使用$_COOKIE 时会报错?

【问题讨论】:

  • 我从事 php 开发已经快 10 年了,但方括号却没有引起我的注意。这对您有帮助。

标签: php


【解决方案1】:

应该是$_COOKIE['name'],而不是$_COOKIE('name')

$_COOKIE 是一个数组,而不是一个函数。

【讨论】:

    【解决方案2】:

    它将是$_COOKIE['CaptchaResponseValue'],而不是$_COOKIE('CaptchaResponseValue')

    【讨论】:

      【解决方案3】:

      在编程语言或脚本语言中使用括号通常意味着它是一个函数。

      然而 php 中的 $_COOKIE 不是一个函数,它是一个 Array。要访问数组中的数据,请使用方括号('[' 和 ']'),它们表示从哪个索引获取数据。所以通过$_COOKIE['test'],你基本上是在说:“给我来自索引'test'的数据。

      现在,在您的情况下,您有两种可能性:(1) 要么您想查看它是否为假——通过查看 cookie 内部,要么 (2) 看看它是否甚至不存在。

      为此,您使用isset 函数,它基本上检查变量是否已设置。

      示例

      if ( isset($_COOKIE['test'] ) )
      

      如果您想检查该值是否为 false 并且已设置,您可以执行以下操作:

      if ( isset($_COOKIE['test']) && $_COOKIE['test'] == "false" )
      

      您可以记住的一件事是,如果第一个测试失败,如果它是 AND (&amp;&amp;),它甚至不会检查下一个语句。

      要解释为什么您实际上会收到错误“函数必须是字符串”,请查看this page。这是关于 PHP 中函数的基本创建,您必须记住的是 PHP 中的函数只能包含某些类型的字符,而 $ 不是其中之一。因为在 PHP 中$ 代表一个变量。

      函数可能如下所示:_myFunction _myFunction123 myFunction 以及许多其他模式,但将其与 $ 和 % 等字符混合将不起作用。

      【讨论】:

        【解决方案4】:

        在 PHP.js 中,$_COOKIE 一个函数 ;-)

        function $_COOKIE(name) {
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length).replace(/\+/g, '%20'));
            }
            return null;
        }
        

        通过http://phpjs.org/functions/setcookie:509

        【讨论】:

        • 技术上是这样,但它会将 cookie 内容转换为数组,因此在这方面,所谓的不是函数。
        【解决方案5】:
        <?php
            require_once '../config/config.php';
            require_once '../classes/class.College.php';
            $Response = array();
            $Parms = $_POST;
            $Parms['Id'] = Id;  
        
                $Parms['function'] = 'DeleteCollege';
                switch ($Parms['function']) {
                case 'InsertCollege': {
                    $Response = College::InsertCollege($Parms);
                    break;
                }
                case 'GetCollegeById': {
                    $Response = College::GetCollegeById($Parms['Id']);
                    break;
                }
                case 'GetAllCollege': {
                    $Response = College::GetAllCollege();
                    break;
                }
                case 'UpdateCollege': {
                    $Response = College::UpdateCollege($Parms);
                    break;
                }
                case 'DeleteCollege': {
                    College::DeleteCollege($Parms['Id']);
                    $Response = array('status' => 'R');
                    break;
                }
            }
            echo json_encode($Response);
        ?>
        

        【讨论】:

        • 请解释一下这是如何回答原始问题的?
        【解决方案6】:

        尝试使用$_COOKIE 使用方括号,而不是括号。像这样:

        <?php
        if ($_COOKIE['CaptchaResponseValue'] == "false")
        {
            header('Location: index.php');
            return;
        }
        ?>
        

        我还稍微更正了您的位置标题调用。

        【讨论】:

          【解决方案7】:

          如果您想确定是否设置了 cookie...使用

          if (isset($_COOKIE['cookie']))
          

          【讨论】:

          • 因为投票系统的运作方式。人们投票赞成他们认为对问题更相关和更有帮助的答案。人们对他们觉得不那么有趣的答案投了反对票。我想这就是你被否决的原因。
          • @Filip Ekberg 这很有启发性......如果这些匿名灵魂留下评论为什么......但我想这并不是一种普遍的做法:)
          【解决方案8】:

          可以在短论文 Parenthesis in Programming Languages 中找到关于如何使用大括号的有用解释(除了上面 Filip Ekberg 的有用答案)。

          【讨论】:

            最近更新 更多