web-dev-qa-db-ja.com

奇妙なPHPエラー: '書き込みコンテキストで関数の戻り値を使用できません'

このエラーが発生しているので、頭や尾を確認できません。

正確なエラーメッセージは次のとおりです。

致命的エラー:48行目の/home/curricle/public_html/descarga/index.phpの書き込みコンテキストで関数の戻り値を使用できません

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

もしかして

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

ちなみにあなたは本当に意味する

if(isset($_POST['sms_code'])) {
111
chaos

これは、関数の戻り値で空を使用する場合にも発生します

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

emptyは関数ではなく言語構成体で(不明)、変数のみを受け取るためです。

右:

empty($someVar)

違う:

empty(someFunc())

PHP 5.5以降、変数以上のものをサポートしています。ただし、5.5より前に必要な場合は、trim($name) == falseを使用してください。 空のドキュメント から。

487
rolfen
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 
22
TigerTiger

WORDPRESS

の代わりに:

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

する必要があります:

if (!get_option('smth'))
13
T.Todua

正しい構文(最後に括弧がありません):

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

追伸BOOLEAN(true/false)がすでに返されているため、== TRUE部分は必要ありません。

10
middus

これは、複数のシナリオで発生する可能性があります。以下は、よく知られているシナリオのリストです。

// 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.
4
Mehdi Karamosly

私もあなたと同じような問題を抱えていました。問題は、古いphpバージョンを使用していることです。 PHP 5.6にアップグレードしましたが、問題はもうありません。

3
husnixs

問題は()にあり、[]に行かなければなりません

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

によって

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

このエラーが構文エラーのためにトリガーされる別のシナリオ:

ucwords($variable) = $string;
1
tomelin5

また、構文エラーが原因でこの問題に遭遇しました。配列インデックスで「[」の代わりに「(」を使用:

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