PHP 7,致命错误:常量表达式包含无效操作

时间:2016-09-03 13:28:09

标签: php mysql php-7

我正在构建一个网站的登录序列,我正在为MySQL和PHP7的学校项目设计(我比较新)。我需要一些帮助来理解这个错误的含义以及我如何解决这个问题:

致命错误:常量表达式在第19行的C:\ Abyss Web Server \ htdocs \ login_tools.php中包含无效操作

以下是函数的代码行,该函数确保登录成功并检索关联的用户详细信息:

function validate($dbc, $email=",$pwd=")

2 个答案:

答案 0 :(得分:8)

我认为对此错误消息的解释很有价值,因为它是PHP 7的新功能 - 为了清晰起见,我们重新构建它:

<?php

function validate($dbc, $email="$foo"){
}

?>

作为初学者,您可能会发现PHP 5.6的错误消息对调试更有帮助:

  

PHP Parse错误:语法错误,意外'''in   第3行/home/hpierce/test.php

但是,PHP 7会显示您找到的错误:

  

致命错误:常量表达式包含无效操作   第3行/home/hpierce/test.php

当您声明一个可选参数时,就像使用$email一样,您需要提供一个独立的文字值(“常量表达式”)而无需进行评估(通过使用“无效操作”确定)。通过包含对$foo的引用,您已使用在此处无效的动态表达式声明了可选参数。

提供常量表达式的示例:

//Providing an integer literal
function validate($dbc, $email=1){}

//Providing a string literal
function validate2($dbc, $email="foo"){}

//Providing an array literal
function validate3($dbc, $email=Array("foo", "bar")){}

此规则适用于需要定义常量表达式的任何情况,例如添加类常量:

<?php

class Foo
{
    //Fatal error: Constant expression contains invalid operations
    const BAR = $bar;
}

?>

答案 1 :(得分:1)

正如您所发布的代码行所示,您在函数声明中使用了单引号。如果仔细观察,你会看到,pwd =“因为$ email =

之后的单引号而全部为红色

将双引号更改为2个单引号或添加另一个双引号。

function validate($dbc, $email='',$pwd='')

OR

function validate($dbc, $email="",$pwd="")