Articles in category: Italiano
A ben più di uno sviluppatore sarà capitato di incappare nel comune errore MySQL server has gone away!, magari seguito da un eccezione lanciata da una delle classi PDO, come ad esempio PDOStatement::execute(): Error reading result set’s header.
Nella maggior parte dei casi, quando questo avviene in ambiente PHP, siamo connessi in maniera persistente (per fortuna!) ed a causa di una esecuzione troppo lunga, la connessione col server MySQL va in timeout. Lunghi tasks in batch, chiamate a ws non particolarmente rapidi, carichi elevati del server, sono alcuni degli scenari possibili.
Gli operatori ternari sono diffusi in molti linguaggi di programmazione e permettono di esprimire con una sintassi breve logiche condizionali. Per utilizzarli propriamente in PHP è però necessario conoscerne il comportamento.
Vediamo un esempio
var_dump(true ? 'a' : 'b' ? 'c' : 'd'); // OUTPUT: string(1) "c"
Se state pensando che il risultato di questa espressione sia ovvio, vediamo cosa succede ad esempio in javascript
console.log(true ? 'a' : 'b' ? 'c' : 'd'); // OUTPUT: a
Bene, mentre in PHP il risultato è dato da:
- true è vero, ritorna a
- a castato a bool è vero, stampa c
In javascript invece il ragionamento è diverso:
PHP, fin dalla versione 5.2.0, introduce gli oggetti \DateTime
per operare con date ed intervalli, fornendo finalmente un alternativa alle vecchie funzioni procedurali.
Recentemente mi sono reso conto di uno strano comportamento che si verifica quando vengono chiamate var_dump
, print_r
, var_export
o debug_zval_dump
su un istanza di \DateTime
.
Considerando il seguente codice e il suo output:
$date = new \DateTime();
var_dump(isset($date->date)); // OUTPUT: bool(false)
ci rendiamo conto del fatto che non esiste alcuna proprietà $date
all’interno dell’istanza di \DateTime
.
Assegnare valori alle variabili è sicuramente l’operazione più comune all’interno di uno script PHP. Ma come vengono conservate queste informazioni dall’interprete? Vediamolo assieme!
L’unità fondamentale di storage dei dati in PHP è la Zend Value (zval). Si tratta di una struct definita alla linea 334 di zend.h
, la riporto qui di seguito per commentarne le proprietà.