Странная ошибка PHP: «Невозможно использовать возвращаемое значение функции в контексте записи» - PullRequest
178 голосов
/ 07 октября 2009

Я получаю эту ошибку, и я не могу сделать ни голову, ни хвост.

Точное сообщение об ошибке:

Неустранимая ошибка: невозможно использовать функцию возврата значение в контексте записи в /home/curricle/public_html/descarga/index.php по линии 48

Строка 48:

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

Кто-нибудь знает, что происходит ???

PS Вот полная функция, на случай, если она поможет:

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

Ответы [ 10 ]

487 голосов
/ 01 февраля 2010

Это также происходит при использовании пустого в функции return:

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

потому что empty - это не функция, а языковая конструкция (не уверен) и она принимает только переменные

Справа:

empty($someVar)

Неправильно:

empty(someFunc())

Начиная с PHP 5.5, он поддерживает не только переменные. Но если вам это нужно до 5.5, используйте trim($name) == false. Из пустая документация .

111 голосов
/ 07 октября 2009

Вы имеете в виду

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

хотя, кстати, вы действительно имеете в виду

if(isset($_POST['sms_code'])) {
22 голосов
/ 07 октября 2009
if (isset($_POST('sms_code') == TRUE ) {

изменить эту строку на

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

Вы используете круглые скобки () для $_POST, но вам нужны квадратные скобки []

:)

OR

if (isset($_POST['sms_code']) && $_POST['sms_code']) { 
//this lets in this block only if $_POST['sms_code'] has some value 
13 голосов
/ 26 марта 2015

для WORDPRESS :

вместо:

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

должно быть:

if (!get_option('smth'))
10 голосов
/ 07 октября 2009

Правильный синтаксис (в конце у вас не было скобок):

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

p.s. вам не нужна == TRUE часть, потому что BOOLEAN (true / false) уже возвращается.

4 голосов
/ 05 мая 2014

Это может произойти в нескольких сценариях, ниже приведен список известных сценариев:

// 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.
3 голосов
/ 19 августа 2015

У меня тоже была похожая проблема, как у вас. Проблема в том, что вы используете старую версию php. Я обновился до PHP 5.6, и проблема больше не существует.

3 голосов
/ 24 мая 2015

Проблема в (), вам нужно идти []

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

от

if (isset($_POST['sms_code'] == TRUE)
1 голос
/ 23 июня 2017

Другой сценарий, в котором эта ошибка вызвана синтаксической ошибкой:

ucwords($variable) = $string;
0 голосов
/ 30 июля 2016

Я также столкнулся с этой проблемой из-за синтаксической ошибки. Использование "(" вместо "[" в индексе массива:

   foreach($arr_parameters as $arr_key=>$arr_value) {
        $arr_named_parameters(":$arr_key") = $arr_value;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...