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

JO'*_*ell 2 php mysql php-7

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

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

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

function validate($dbc, $email=",$pwd=")
Run Code Online (Sandbox Code Playgroud)

HPi*_*rce 8

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

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

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

PHP解析错误:语法错误,第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")){}
Run Code Online (Sandbox Code Playgroud)

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

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)


Dav*_*ave 2

正如您所发布的代码行所见,您在函数声明中使用了单双引号。如果仔细观察,您会发现 ,pwd= 全部为红色,因为 $email= 后面有一个双引号

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

function validate($dbc, $email='',$pwd='')
Run Code Online (Sandbox Code Playgroud)

或者

function validate($dbc, $email="",$pwd="")
Run Code Online (Sandbox Code Playgroud)