奇怪的 PHP 错误: “不能在写入上下文中使用函数返回值”

我得到这个错误,我不能理解它的头部或尾部。

确切的错误消息是:

致命错误: 不能使用函数返回 中写上下文中的值 /home/curric/public _ html/descarga/index.php 在48号线

第48行是:

if (isset($_POST('sms_code') == TRUE ) {

这里到底发生了什么?

全部功能如下:

function validate_sms_code() {


$state = NOTHING_SUBMITED;


if (isset($_POST('sms_code') == TRUE ) {
$sms_code = clean_up($_POST('sms_code'));
$return_code = get_sepomo_code($sms_code);


switch($return_code) {


case 1:
//no error
$state = CORRECT_CODE;
break;


case 2:
// code already used
$state = CODE_ALREADY_USED;
break;


case 3:
// wrong code
$state = WRONG_CODE;
break;


case 4:
// generic error
$state = UNKNOWN_SEPOMO_CODE;
break;


default:
// unknown error
$state = UNKNOWN_SEPOMO_CODE;
throw new Exception('Unknown sepomo code: ' . $return_code);
break;
}


} else {
$state = NOTHING_SUBMITED;
}
dispatch_on_state($state);
}
211390 次浏览

你是说

if (isset($_POST['sms_code']) == TRUE ) {

虽然你的意思是

if (isset($_POST['sms_code'])) {
if (isset($_POST('sms_code') == TRUE ) {

把这条线改成

if (isset($_POST['sms_code']) == TRUE ) {

对于 $_POST使用括号() ,但是需要方括号[]

:)

或者

if (isset($_POST['sms_code']) && $_POST['sms_code']) {
//this lets in this block only if $_POST['sms_code'] has some value

正确的语法(最后缺少括号) :

if (isset($_POST['sms_code']) == TRUE ) {
^

P.s. 您不需要 == TRUE部分,因为已经返回了 BOOLEAN (true/false)。

在函数返回时使用空时也会发生这种情况:

!empty(trim($someText)) and doSomething()

因为 void 不是一个函数,而是一个语言结构(不确定) ,它只接受变量:

右图:

empty($someVar)

错:

empty(someFunc())

从 PHP 5.5开始,它支持的变量不止一个,但是如果你在5.5之前需要它,使用 trim($name) == false

这种情况可能发生在不止一种情况下,下面是一些众所周知的情况:

// calling empty on a function
empty(myFunction($myVariable)); // the return value of myFunction should be saved into a variable
// then you can use empty on your variable

//使用括号访问数组的元素,使用括号调用函数

if (isset($_POST('sms_code') == TRUE ) { ...
// that should be if(isset($_POST['sms_code']) == TRUE)

当我们尝试增加下面函数的结果时,也可以触发这个函数:

$myCounter = '356';


$myCounter = intVal($myCounter)++; // we try to increment the result of the intVal...
// like the first case, the ++ needs to be called on a variable, a variable should hold the the return of the function then we can call ++ operator on it.

文字记录:

而不是:

if (empty(get_option('smth')))

应该是:

if (!get_option('smth'))

问题是在 ()你必须走 []

if (isset($_POST('sms_code') == TRUE)

作者

if (isset($_POST['sms_code'] == TRUE)

我也有过类似的问题。问题是您使用的是一个旧的 php 版本。我已经升级到 PHP 5.6,这个问题不再存在了。

由于语法错误,我也遇到了这个问题。在数组索引中使用“(”而不是“[”:

   foreach($arr_parameters as $arr_key=>$arr_value) {
$arr_named_parameters(":$arr_key") = $arr_value;
}

这个错误触发到期语法错误的另一个场景:

ucwords($variable) = $string;

此错误非常正确,并突出显示了上下文语法问题。可以通过执行任何类型的“不可赋值”语法进行复制。例如:

函数语法($hello){ ... 。然后尝试像调用属性一样调用函数并赋值... . $this-> Syntax (‘ Hello’) = ‘ World’;

由于语句的语法错误,将引发上述错误。“ World”的正确赋值不能在您所使用的上下文中写入(例如,该上下文的语法不正确)。“无法使用函数返回值”或者可以读取“无法将右边的值赋给函数,因为它是只读的”

OPs 代码中的特定错误高亮显示,使用方括号而不是方括号。

当它应该是 = = 时,可能由错误的运算符 = 引起

if(mysql_num_rows($result) = 1)
return $result;
else
return false;

此代码引发此错误

注意 = 是赋值运算符而不是比较运算符。