Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP 8.2: le proprietà dinamiche sono deprecate

Una delle novità più rilevanti di PHP 8.2 riguarda il fatto che ora le proprietà dinamiche sono state deprecate
PHP 8.2: le proprietà dinamiche sono deprecate
Una delle novità più rilevanti di PHP 8.2 riguarda il fatto che ora le proprietà dinamiche sono state deprecate
Link copiato negli appunti

In un precedente articolo abbiamo parlato delle classi in sola lettura come di una delle principali feature di PHP 8.2.

Un'altra novità di questo aggiornamento che merita di essere evidenziata riguarda il fatto che le proprietà dinamiche sono state deprecate.

Cosa sono le proprietà dinamiche

Per capire quali siano le implicazioni di tale cambiamento è necessario comprendere innanzitutto lo scopo e il funzionamento delle proprietà dinamiche. Esse infatti permettono di impostare le proprietà di un oggetto inesistente nel contesto di una classe.

Questo significa che fino ad ora era consentito l'utilizzo di un'espressione di questo genere:

class Simpson{}
$simpson = new Simpson();
$simpson->name = 'Peter';

Dal punto di vista della flessibilità si tratta di una feature particolarmente comoda, il problemi emergono però quando le proprietà dinamiche generano dei comportamenti inattesi.

Si immagini ad esempio il caso in cui lo sviluppatore decide di assegnare un nuovo nome alla proprietà, lo stesso dovrà essere fatto per tutte le volte in cui essa è stata utilizzata.

Si potrà obbiettare che un comune editor di codice permetterebbe di svolgere questa operazione velocemente, ma come prevedere la possibilità di errori derivanti da serch & replace massivi?

Rendendo le proprietà dinamiche un costrutto deprecato, le uniche proprietà consentite saranno quindi quelle che sono state effettivamente definite in fase di coding.

Chi continuerà ad utilizzarle riceverà un warning. È però ancora permesso l'utilizzo dei metodi __get() o __set() per definire proprietà dinamiche su un oggetto.

L'attributo AllowDynamicProperties

AllowDynamicProperties è un attributo che per ora consente di proseguire con l'utilizzo delle proprietà dinamiche senza la visualizzazione di alcuna notifica, come nell'esempio seguente:

#[AllowDynamicProperties]
class Simpson{}
$simpson = new Simpson();
$simpson->name = 'Peter';

Una particolarità di questo attributo riguarda il fatto che esso è ereditabile dalle sottoclassi di una classe principale. Nel caso in cui si voglia estendere una classe da stdClass, cioè l'oggetto di default di PHP privo di proprietà, basterà specificarlo a partire dalla classe coinvolta:

class Simpson extends stdClass{}
$simpson = new Simpson();
$simpson->name = 'Peter';

In ogni caso non si potrà definire una proprietà dinamica per una classe in sola lettura, neanche utilizzando l'attributo AllowDynamicProperties.

Ti consigliamo anche