Pojawia się ten błąd i nie mogę zrobić z niego głowy ani ogona.
Dokładny komunikat o błędzie to:
Błąd krytyczny: nie można użyć zwracanej wartości funkcji w kontekście zapisu w /home/curricle/public_html/descarga/index.php w linii 48
Linia 48 to:
if (isset($_POST('sms_code') == TRUE ) {
Co tu się dzieje?
Oto pełna funkcja:
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
źródło
źródło
$state
nie zostanie zmodyfikowany, nie trzeba go resetować,NOTHING_SUBMITED
jeśli jest to już ta wartość.Odpowiedzi:
Masz na myśli
chociaż nawiasem mówiąc, naprawdę masz na myśli
źródło
if (isset($_POST['sms_code']) === TRUE ) {
:-)Dzieje się tak również w przypadku używania pustego przy zwrocie funkcji:
ponieważ pusty nie jest funkcją, ale konstrukcją języka (nie jestem pewien) i przyjmuje tylko zmienne:
Dobrze:
Źle:
Od PHP 5.5 obsługuje więcej niż zmienne. Ale jeśli potrzebujesz go przed 5.5, użyj
trim($name) == false
. Z pustej dokumentacji .źródło
empty()
tak naprawdę nie jest funkcją; to konstrukcja językowaecho
. Parser PHP obsługuje konstrukcje językowe inaczej. W przypadkuempty
patrzy na parametr jako zmienną, a nie na coś do oceny, więc jeśli spróbujesz przekazać funkcję, psuje się. Przynajmniej tak to rozumiem. Więcej informacji tutaj i tutaj .function mTEE($val){ return empty($val); }
zmień ten wiersz na
Używasz nawiasów (),
$_POST
ale chcesz nawiasów kwadratowych []:)
LUB
źródło
dla WORDPRESS :
zamiast:
Powinien być:
źródło
Prawidłowa składnia (na końcu brakowało nawiasów):
ps nie potrzebujesz
== TRUE
części, ponieważ BOOLEAN (prawda / fałsz) jest już zwracany.źródło
Może się to zdarzyć w więcej niż jednym scenariuszu, poniżej znajduje się lista dobrze znanych scenariuszy:
// używając nawiasu, aby uzyskać dostęp do elementu tablicy, nawiasy są używane do wywoływania funkcji
Można to również uruchomić, gdy próbujemy zwiększyć wynik funkcji takiej jak poniżej:
źródło
if(i++)
, może wyglądać krócej niż zwiększanie licznika, a następnie ocena jego wartości, ale spowoduje bóle głowy, jeśli kiedykolwiek się zepsuje. Edycja: Nie sugeruję, że to robisz, po prostu wskazując go nowym programistom czytającym odpowiedź i myślącym, że to fajna rzecz, zwiększać wartości podczas obliczania lub oceny tego, co jest zwiększane.=
zamiast==
w instrukcji if.Problem polega na tym,
()
że musisz iść[]
przez
źródło
Miałem również podobny problem jak twój. Problem polega na tym, że używasz starej wersji php. Uaktualniłem do PHP 5.6 i problem już nie istnieje.
źródło
Kolejny scenariusz, w którym ten błąd jest wywoływany z powodu błędu składniowego:
źródło
ucwords
zwraca łańcuch, a kontekst wywołania jest niepoprawny, jeśli spróbujesz na przykład za pomocą$Test = ''; ${ucwords('test')} = 'String new !'; echo $Test;
, to pokaże ci nową przypisaną wartość.napotkałem również ten problem z powodu błędu składniowego. Używanie „(” zamiast „[” w indeksie tablic:
źródło
Ten błąd ma rację i podkreśla problem składni kontekstowej. Można go odtworzyć, wykonując dowolną składnię „nieprzypisywalną”. Na przykład:
funkcja Składnia ($ hello) {...., a następnie spróbuj wywołać funkcję jak właściwość i przypisz wartość .... $ this-> Składnia ('Hello') = 'World';
Powyższy błąd zostanie zgłoszony, ponieważ składnia jest niepoprawna. Właściwe przypisanie „Świata” nie może być zapisane w kontekście, który wykorzystałeś (tj. Niepoprawnie składniowo w tym kontekście). „Nie można użyć wartości zwracanej przez funkcję” lub może on odczytać „Nie można przypisać funkcji po prawej stronie, ponieważ jest ona tylko do odczytu”
Konkretny błąd w kodzie OP jest podświetlony, przy użyciu nawiasów zamiast nawiasów kwadratowych.
źródło
Może być spowodowany niewłaściwym operatorem, =, kiedy powinno być ==
Ten kod zgłasza ten błąd
Zauważ, że = jest operatorem przypisania, a nie operatorem porównania. Naprawieniem jest zmiana = na ==.
źródło