Ich erhalte diesen Fehler und kann weder Kopf noch Schwanz daraus machen.
Die genaue Fehlermeldung lautet:
Schwerwiegender Fehler: Der Funktionsrückgabewert kann im Schreibkontext in /home/curricle/public_html/descarga/index.php in Zeile 48 nicht verwendet werden
Zeile 48 lautet:
if (isset($_POST('sms_code') == TRUE ) {
Was könnte hier los sein?
Hier ist die volle Funktion:
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);
}
php
fatal-error
cfischer
quelle
quelle
$state
wird nicht geändert, es muss nicht zurückgesetzt werden,NOTHING_SUBMITED
wenn es bereits dieser Wert ist.Antworten:
Was meinen Sie
obwohl du übrigens wirklich meinst
quelle
if (isset($_POST['sms_code']) === TRUE ) {
:-)Dies geschieht auch, wenn bei einer Funktionsrückgabe leer verwendet wird:
weil leer keine Funktion, sondern ein Sprachkonstrukt ist (nicht sicher) und nur Variablen benötigt:
Richtig:
Falsch:
Seit PHP 5.5 werden mehr als nur Variablen unterstützt. Wenn Sie es jedoch vor 5.5 benötigen, verwenden Sie
trim($name) == false
. Aus leerer Dokumentation .quelle
empty()
es eigentlich keine Funktion ist; Es ist ein Sprachkonstrukt wieecho
. Der PHP-Parser behandelt Sprachkonstrukte unterschiedlich. Im Fall vonempty
wird der Parameter als eine Variable betrachtet, die nicht ausgewertet werden muss. Wenn Sie also versuchen, eine Funktion zu übergeben, wird sie unterbrochen. Zumindest verstehe ich das so. Mehr Infos hier und hier .function mTEE($val){ return empty($val); }
Ändern Sie diese Zeile in
Sie verwenden parentheseis () für,
$_POST
aber Sie wollten eckige Klammern []:) :)
ODER
quelle
für WORDPRESS :
anstatt:
sollte sein:
quelle
Richtige Syntax (am Ende fehlten Klammern):
ps du brauchst keinen
== TRUE
teil, da BOOLEAN (true / false) bereits zurückgegeben wird.quelle
Dies kann in mehr als einem Szenario vorkommen. Nachfolgend finden Sie eine Liste bekannter Szenarien:
// Verwenden von Klammern für den Zugriff auf ein Element eines Arrays. Klammern werden zum Aufrufen einer Funktion verwendet
Dies könnte auch ausgelöst werden, wenn wir versuchen, das Ergebnis einer Funktion wie folgt zu erhöhen:
quelle
if(i++)
, kann es aussehen kürzer als der Zähler erhöht wird und dann seinen Wert bewerten, aber es wird Sie Kopfschmerzen , wenn es jemals Fehler verursachen aus. Bearbeiten: Ich impliziere nicht, dass Sie es tun, sondern nur neue Programmierer darauf hinweisen, die die Antwort lesen und denken, dass dies eine nette Sache ist, um Werte zu erhöhen, während Sie das berechnen oder bewerten, was erhöht wird.=
anstelle==
einer if-Anweisung.Das Problem ist, dass
()
Sie gehen müssen[]
durch
quelle
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.
quelle
Ein weiteres Szenario, in dem dieser Fehler aufgrund eines Syntaxfehlers ausgelöst wird:
quelle
ucwords
dass eine Zeichenfolge zurückgegeben wird und der Kontext des Aufrufs falsch ist. Wenn Sie beispielsweise versuchen, mit$Test = ''; ${ucwords('test')} = 'String new !'; echo $Test;
, zeigen Sie den neuen zugewiesenen Wert an.Ich bin auch auf dieses Problem aufgrund eines Syntaxfehlers gestoßen. Verwenden von "(" anstelle von "[" im Array-Index:
quelle
Dieser Fehler ist völlig richtig und weist auf ein Problem mit der Kontextsyntax hin. Kann reproduziert werden, indem eine beliebige "nicht zuweisbare" Syntax ausgeführt wird. Zum Beispiel:
Funktion Syntax ($ hello) {.... dann versuchen Sie, die Funktion wie eine Eigenschaft aufzurufen und einen Wert zuzuweisen .... $ this-> Syntax ('Hello') = 'World';
Der obige Fehler wird ausgelöst, da die Anweisung syntaktisch falsch ist. Die richtige Zuordnung von 'Welt' kann nicht in dem von Ihnen verwendeten Kontext geschrieben werden (dh für diesen Kontext syntaktisch falsch). 'Funktionsrückgabewert kann nicht verwendet werden' oder es könnte lauten: 'Der Funktion kann der rechte Wert nicht zugewiesen werden, da er schreibgeschützt ist.'
Der spezifische Fehler im OP-Code wird hervorgehoben, wobei Klammern anstelle von eckigen Klammern verwendet werden.
quelle
Kann durch einen falschen Operator verursacht werden, =, wenn es == sein sollte
Dieser Code löst diesen Fehler aus
Beachten Sie, dass = Zuweisungsoperator und kein Vergleichsoperator ist. Fix ist zu ändern = zu ==.
quelle