L'errore è stato aggiunto nel PHP7 e ho problema con tale codice come:C'è un interruttore per disabilitare l'errore "non è possibile utilizzare l'espressione temporanea in contesto di scrittura"?
(some complex expression)->my_property = 1
Si prega di notare Sto assegnando al campo dell'oggetto, non l'oggetto stesso (assegnando ad oggetto temporaneo non rende senso, sono d'accordo, ma qui è non il caso).
Questo mi dà un errore "non è possibile utilizzare l'espressione temporanea nel contesto di scrittura". Quando ho riscrivere questo come:
$tmp = (some complex expression);
$tmp->my_property = 1;
tutto bene. Il problema è che devo avere una singola espressione (l'assegnazione è un'espressione) e poiché PHP non supporta l'operatore virgola ora sono tostato con due dichiarazioni .
Per me questa è un'enorme differenza, perché non riesco a passare l'intero codice come espressione ulteriore. Tutto è valido all'interno di quella "espressione complessa", quindi mi piacerebbe semplicemente disabilitare quel controllo in PHP.
È possibile? Come?
Il mio codice è scritto automaticamente (è generato) e il risultato dell'espressione è un oggetto PHP valido, il problema è PHP in qualche modo non se ne accorge. Inoltre, il secondo modulo funziona.
Update: questo è un esempio di un'espressione complessa che ho citato sopra:
(($a = foo()) === 0 ? $a : bar())
che cosa esattamente restituisce/fa questa espressione complessa? dato l'errore, stai provando a fare qualcosa come '1 + 1 = 2', che proverebbe ad assegnare' 2' al risultato di '1 + 1' - che sarebbe un valore temporaneo, dal momento che non è memorizzato ovunque, e stai tentando di scrivere su di esso, causando l'errore. –
@MarcB, ho aggiornato la domanda, il tuo confronto non è corretto (un po '), perché sto assegnando un campo, non l'oggetto. Quindi, anche se l'oggetto è temporaneo, è ben noto quando si tratta di accedere al campo, ed è il campo che viene assegnato (alterato), non l'intero oggetto. – greenoldman
@MarcB La differenza è che gli oggetti vengono passati per riferimento, non per copia, quindi se un'espressione restituisce un oggetto è valido da assegnare a una proprietà. – Barmar