webentwicklung-frage-antwort-db.com.de

Weird PHP error: 'Rückgabewert der Funktion kann nicht im Schreibkontext verwendet werden'

Ich bekomme diesen Fehler und kann ihn nicht richtig beantworten.

Die genaue Fehlermeldung lautet:

Schwerwiegender Fehler: Der Funktionsrückgabewert kann nicht im Schreibkontext in /home/curricle/public_html/descarga/index.php in Zeile 48 verwendet werden

Zeile 48 ist:

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

Weiß jemand was los ist ???

PS Hier ist die volle Funktion, falls es hilft:

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

Was meinen Sie

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

obwohl du übrigens wirklich meinst

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

Dies passiert auch, wenn bei einer Funktionsrückgabe leer verwendet wird:

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

weil leer keine Funktion, sondern ein Sprachkonstrukt ist (nicht sicher) und nur Variablen akzeptiert:

Richtig:

empty($someVar)

Falsch:

empty(someFunc())

Seit PHP 5.5 unterstützt es mehr als Variablen. Wenn Sie es jedoch vor 5.5 benötigen, verwenden Sie trim($name) == false. From leere Dokumentation .

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

ändern Sie diese Zeile in

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

Sie verwenden Klammern () für $_POST aber du wolltest eckige Klammern []

:)

OR

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

für WORDPRESS :

anstatt von:

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

sollte sein:

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

Richtige Syntax (am Ende fehlten Klammern):

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

p.s. du brauchst nicht == TRUE part, da BOOLEAN (true/false) bereits zurückgegeben wird.

10
middus

Dies kann in mehreren Szenarien vorkommen. Nachfolgend finden Sie eine Liste bekannter Szenarien:

// 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

// Verwenden von Klammern, um auf ein Element eines Arrays zuzugreifen, und Klammern, um eine Funktion aufzurufen

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

Dies kann auch ausgelöst werden, wenn wir versuchen, das Ergebnis einer der folgenden Funktionen zu erhöhen:

$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

Ich hatte auch ein ähnliches Problem wie deins. Das Problem ist, dass Sie eine alte PHP-Version verwenden. Ich habe ein Upgrade auf PHP 5.6 durchgeführt und das Problem besteht nicht mehr.

3
husnixs

Das Problem liegt in der () du musst gehen []

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

durch

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

Ein weiteres Szenario, in dem dieser Fehler aufgrund eines Syntaxfehlers ausgelöst wird:

ucwords($variable) = $string;
1
tomelin5

ich habe auch dieses Problem aufgrund eines Syntaxfehlers. Verwenden Sie "(" anstelle von "[" im Array-Index:

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