Recibo este error y no puedo entenderlo.
El mensaje de error exacto es:
Error fatal: no se puede usar el valor de retorno de la función en el contexto de escritura en /home/curricle/public_html/descarga/index.php en la línea 48
La línea 48 es:
if (isset($_POST('sms_code') == TRUE ) {
¿Qué podría estar pasando aquí?
Aquí está la función completa:
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
fuente
fuente
$state
no se modificará, no es necesario restablecerloNOTHING_SUBMITED
si ya es ese valor.Respuestas:
Quiere decir
aunque por cierto realmente quieres decir
fuente
if (isset($_POST['sms_code']) === TRUE ) {
:-)Esto también sucede cuando se usa vacío en una función return:
porque vacío no es una función sino una construcción de lenguaje (no estoy seguro), y solo toma variables:
Correcto:
Incorrecto:
Desde PHP 5.5, admite más que variables. Pero si lo necesita antes de 5.5, úselo
trim($name) == false
. De la documentación vacía .fuente
empty()
realidad no es una función; es una construcción de lenguaje, comoecho
. El analizador PHP maneja construcciones de lenguaje de manera diferente. En el caso deempty
, considera el parámetro como una variable, no como algo a evaluar, por lo que si intenta pasar una función, se rompe. Al menos así lo entiendo. Más información aquí y aquí .function mTEE($val){ return empty($val); }
cambia esta línea a
Estás utilizando parentheseis () para
$_POST
pero quería corchetes []:)
O
fuente
para WORDPRESS :
en vez de:
debiera ser:
fuente
Sintaxis correcta (al final le faltaron paréntesis):
ps no necesita
== TRUE
parte, porque BOOLEAN (verdadero / falso) ya ha sido devuelto.fuente
Esto puede suceder en más de un escenario, a continuación hay una lista de escenarios bien conocidos:
// usando paréntesis para acceder a un elemento de una matriz, los paréntesis se usan para llamar a una función
Esto también podría activarse cuando intentamos incrementar el resultado de una función como la siguiente:
fuente
if(i++)
, puede parecer más corto que incrementar el contador y luego evaluar su valor, pero te causará dolores de cabeza si alguna vez se produce un error. Editar: no estoy insinuando que lo hagas, solo se lo señalo a los nuevos programadores que leen la respuesta y piensan que es una buena idea, para aumentar los valores al calcular o evaluar lo que se está incrementando.=
lugar de==
en una declaración if.El problema está en el
()
que tienes que ir[]
por
fuente
También tuve un problema similar al tuyo. El problema es que está utilizando una versión antigua de php. He actualizado a PHP 5.6 y el problema ya no existe.
fuente
Otro escenario en el que se trige este error debido al error de sintaxis:
fuente
ucwords
devuelve una cadena y el contexto de la llamada es incorrecto, si intenta, por ejemplo$Test = ''; ${ucwords('test')} = 'String new !'; echo $Test;
, con , le mostrará el nuevo valor asignado.También me encontré con este problema debido a un error de sintaxis. Usando "(" en lugar de "[" en el índice de matriz:
fuente
Este error es bastante correcto y destaca un problema de sintaxis contextual. Se puede reproducir realizando cualquier tipo de sintaxis "no asignable". Por ejemplo:
sintaxis de función ($ hello) {.... luego intente llamar a la función como si fuera una propiedad y asignar un valor .... $ this-> Syntax ('Hello') = 'World';
El error anterior se lanzará porque sintácticamente la declaración es incorrecta. La asignación correcta de 'Mundo' no se puede escribir en el contexto que ha utilizado (es decir, sintácticamente incorrecto para este contexto). 'No se puede usar el valor de retorno de la función' o podría leerse 'No se puede asignar el valor de la mano derecha a la función porque es de solo lectura'
El error específico en el código de OP es el resaltado, usando corchetes en lugar de corchetes.
fuente
Puede ser causado por un operador incorrecto, =, cuando debería ser ==
Este código arroja este error
Tenga en cuenta que = es operador de asignación y no operador de comparación. La solución es cambiar = a ==.
fuente