Estou recebendo esse erro e não consigo entender.
A mensagem de erro exata é:
Erro fatal: não é possível usar o valor de retorno da função no contexto de gravação em /home/curricle/public_html/descarga/index.php na linha 48
A linha 48 é:
if (isset($_POST('sms_code') == TRUE ) {
O que poderia estar acontecendo aqui?
Aqui está a função 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
fonte
fonte
$state
não será modificado, não há necessidade de redefini-loNOTHING_SUBMITED
se já tiver esse valor.Respostas:
Você quer dizer
embora, aliás, você realmente queira dizer
fonte
if (isset($_POST['sms_code']) === TRUE ) {
:-)Isso também acontece ao usar vazio em um retorno de função:
porque vazio não é uma função, mas uma construção de linguagem (não tenho certeza) e leva apenas variáveis:
Certo:
Errado:
Desde o PHP 5.5, ele suporta mais do que variáveis. Mas se você precisar antes do 5.5, use
trim($name) == false
. Da documentação vazia .fonte
empty()
na verdade não é uma função; é uma construção de linguagem, comoecho
. O analisador PHP lida com construções de linguagem de maneira diferente. No caso deempty
, ele analisa o parâmetro como uma variável, não como algo a ser avaliado; portanto, se você tentar passar uma função, ela será interrompida. Pelo menos essa é a minha compreensão. Mais informações aqui e aqui .function mTEE($val){ return empty($val); }
mude esta linha para
Você está usando parentheseis () para,
$_POST
mas queria colchetes []:)
OU
fonte
para WORDPRESS :
ao invés de:
deveria estar:
fonte
Sintaxe correta (faltam parênteses no final):
ps você não precisa de
== TRUE
parte, porque BOOLEAN (verdadeiro / falso) já foi retornado.fonte
Isso pode acontecer em mais de um cenário. Abaixo está uma lista de cenários conhecidos:
// usando parênteses para acessar um elemento de uma matriz, parênteses são usados para chamar uma função
Isso também pode ser acionado quando tentamos incrementar o resultado de uma função como abaixo:
fonte
if(i++)
, pode parecer mais curto do que incrementar o contador e depois avaliar seu valor, mas causará dores de cabeça se ocorrer algum erro. Edit: Não estou sugerindo que você faça isso, apenas indique aos novos programadores que leem a resposta e acham que isso é uma coisa interessante, para incrementar valores enquanto calcula ou avalia o que está sendo incrementado.=
vez de==
em uma instrução if.O problema está no que
()
você tem que ir[]
de
fonte
Eu também tive um problema semelhante ao seu. O problema é que você está usando uma versão antiga do php. Eu atualizei para o PHP 5.6 e o problema não existe mais.
fonte
Outro cenário em que esse erro é trigerado devido a um erro de sintaxe:
fonte
ucwords
retorna uma string e o contexto da chamada está incorreto, se você tentar, por exemplo$Test = ''; ${ucwords('test')} = 'String new !'; echo $Test;
, com , em seguida, mostrar o novo valor atribuído.Também encontrei este problema devido a um erro de sintaxe. Usando "(" em vez de "[" no índice da matriz:
fonte
Este erro está correto e destaca um problema de sintaxe contextual. Pode ser reproduzido executando qualquer tipo de sintaxe "não atribuível". Por exemplo:
function Sintaxe ($ hello) {.... então tente chamar a função como se fosse uma propriedade e atribua um valor .... $ this-> Sintaxe ('Hello') = 'World';
O erro acima será gerado porque sintaticamente a instrução está errada. A atribuição correta de 'Mundo' não pode ser escrita no contexto que você usou (ou seja, sintaticamente incorreto para este contexto). 'Não é possível usar o valor de retorno da função' ou pode ler 'Não é possível atribuir o valor à direita para a função porque é somente leitura'
O erro específico no código de OP é destacado, usando colchetes em vez de colchetes.
fonte
Pode ser causado por operador errado, =, quando deveria ser ==
Este código gera este erro
Observe que = é operador de atribuição e não operador de comparação. Correção é alterar = para ==.
fonte