我正在为一个网站建立一个登录序列,我正在为一个学校项目设计MySQL和PHP7(我是相对较新的)。我需要一些帮助来理解这个错误的含义以及如何解决这个问题:
致命错误:常量表达式中包含无效操作C:'Abyss Web Server'htdocs'login_tools.php on line 19
下面是一个函数的代码行,它确保登录成功并检索相关的用户详细信息:
function validate($dbc, $email=",$pwd=")
我认为这个错误信息的解释是有价值的,因为它是PHP 7的新内容-让我们重新定义它:
<?php
function validate($dbc, $email="$foo"){
}
?>
作为初学者,您可能会发现PHP 5.6的错误信息对调试更有帮助:
PHP解析错误:语法错误,意外的'/home/hpierce/test.php第三行
但是PHP 7显示你发现的错误:
致命错误:常量表达式中包含无效操作/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;
}
?>
从您发布的代码行可以看到,您在函数声明中使用了单个双引号。如果你仔细看,你会发现pwd="都是红色的,因为$email=
后面有一个双引号将双引号改为2个单引号或添加另一个双引号。
function validate($dbc, $email='',$pwd='')
或
function validate($dbc, $email="",$pwd="")