我正在构建一个网站的登录序列,我正在为MySQL和PHP7的学校项目设计(我比较新)。我需要一些帮助来理解这个错误的含义以及我如何解决这个问题:
致命错误:常量表达式在第19行的C:\ Abyss Web Server \ htdocs \ login_tools.php中包含无效操作
以下是函数的代码行,该函数确保登录成功并检索关联的用户详细信息:
function validate($dbc, $email=",$pwd=")
答案 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="")