181

我收到了这个错误,我无法理解它。

确切的错误信息是:

致命错误:无法在第 48 行 /home/curricle/public_html/descarga/index.php 的写入上下文中使用函数返回值

第 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);
}
4

12 回答 12

494

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

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

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

对:

empty($someVar)

错误的:

empty(someFunc())

自 PHP 5.5 起,它支持的不仅仅是变量。但是如果你在 5.5 之前需要它,使用trim($name) == false. 从空文档

于 2010-01-31T21:04:41.793 回答
113

你的意思是

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

虽然顺便说一句,你真的是说

if (isset($_POST['sms_code'])) {
于 2009-10-07T16:23:43.273 回答
22
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 
于 2009-10-07T16:24:25.733 回答
13

对于WORDPRESS

代替:

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

应该:

if (!get_option('smth'))
于 2015-03-26T09:59:32.550 回答
11

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

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

ps 你不需要 == TRUE 部分,因为 BOOLEAN (true/false) 已经返回。

于 2009-10-07T16:25:29.680 回答
5

这可能发生在多个场景中,以下是众所周知的场景列表:

// 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.
于 2014-05-05T17:28:36.287 回答
3

问题在于()你必须去[]

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

经过

if (isset($_POST['sms_code'] == TRUE)
于 2015-05-24T12:01:41.237 回答
3

我也有和你类似的问题。问题是您使用的是旧的 php 版本。我已经升级到 PHP 5.6 并且问题不再存在。

于 2015-08-19T10:41:53.517 回答
1

由于语法错误而触发此错误的另一种情况:

ucwords($variable) = $string;
于 2017-06-23T04:13:40.873 回答
0

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

   foreach($arr_parameters as $arr_key=>$arr_value) {
        $arr_named_parameters(":$arr_key") = $arr_value;
    }
于 2016-07-30T08:23:13.877 回答
0

这个错误非常正确,并突出了上下文语法问题。可以通过执行任何类型的“不可分配”语法来复制。例如:

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

将抛出上述错误,因为在语法上该语句是错误的。'World' 的正确赋值不能写在你所使用的上下文中(即在这个上下文中语法不正确)。'不能使用函数返回值' 或者它可以读取'不能将右手值分配给函数,因为它是只读的'

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

于 2020-02-17T13:47:28.520 回答
-2

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

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

此代码引发此错误

请注意,= 是赋值运算符而不是比较运算符。解决方法是将 = 更改为 ==。

于 2020-04-04T18:00:42.973 回答