Estou usando um mecanismo de modelo que insere código no meu site onde eu quero.
Eu escrevi uma função para testar algo que é bastante fácil:
myfunction() { return '($this->data["a"]["b"] ? true : false)'; }
O problema é que $ this-> data é privado e não consigo acessá-lo em todos os lugares, então preciso usar getData (); o que causa o meu problema.
$this->getData()['a']['b']
não funciona, e atribuir o valor primeiro também não porque ele será usado diretamente em um bloco if ().
Alguma ideia?
myfunction()
processado posteriormente? Essa parte está faltando na sua pergunta.Respostas:
Desde o PHP 5.4 é possível fazer exatamente isso:
Referência: https://secure.php.net/manual/en/language.types.array.php#example-62
No PHP 5.3 ou anterior, você precisará usar uma variável temporária.
fonte
PHP 5.4.11-1~precise+1
e esse recurso não funciona! Recebi mensagem em respostaParse error: syntax error, unexpected '['
Você não pode usar algo assim:
isto é, a sintaxe de acesso à matriz não é possível diretamente em uma chamada de função.
Você deve usar alguma variável temporária , como esta:
No seu caso, isso provavelmente significa usar algo assim:
Voce tem que :
getData()
método e armazene seu valor de retorno em um varibale temporárioVocê não tem muita escolha sobre isso, na verdade ...
fonte
Ok ... aparentemente não tem jeito melhor mesmo, então vou me responder com uma solução não tão bonita:
Eu criei a função:
E usei assim:
Isso não é bonito, mas funciona.
fonte
$this
->data
está sempre acessível, se estiver protegido. não é acessível de qualquer lugar, então se você estiver voltando$object
->data
$this
em seu código e ele é avaliado como tal, deve estar ok.Aliás, há um bug em seu código: as aspas precisam ser escapadas.
fonte
É possível a partir do PHP versão 5.4.
Se você não quiser uma variável temporária para isso e sua versão do PHP for menor que 5.4 , você ainda pode usar algumas funções integradas para obter o primeiro ou o último elemento:
Editar: !!! Por favor, note que em versões posteriores (5.4+) o PHP irá lançar um aviso, porque end só espera variáveis como parâmetro.
fonte