PDA

View Full Version : [PHP]: Dubbi sulla definizione degli attributi di una classe


mech666
15-01-2017, 13:54
Ciao a tutti, sto da poco imparando il php e sono arrivato alla definizione delle classi,
sto utilizzando http://phpfiddle.org per i miei esercizi.

Ho un dubbio però su questo codice:



<?php

class Pippo{

public $a = NULL;

function __construct($a){
$this->a = $a;
}

}

class Geppo{

function __construct($a){
$this->a = $a;
}

}


$pippo = new Pippo('Sono la stringa di pippo');
echo $pippo->a;

$geppo = new Geppo('Sono la stringa di geppo');
echo '<br>'.$geppo->a;

?>


Come risultato ho la stampa a video delle due stringhe:

Sono la stringa di pippo
Sono la stringa di geppo

però nel caso della classe geppo, siccome l'attributo di classe $a non è stato dichiarato, come mai posso comunque accederlo e stamparlo, e come mai non ho un errore nella porzione di codice del costruttore quando tento di inizializzarlo con la stringa?

Grazie mille per le vostre risposte!

les2
16-01-2017, 09:40
ciao, odio questi esercizi sulle classi, credo non siano mai serviti ad una geppa :)

ti frega perchè con
$geppo = new Geppo('Sono la stringa di geppo');

passi un parametro
function __construct($a){
$this->a = $a;
}



ciao

mech666
16-01-2017, 20:06
Mhh...non ho capito bene...passo un parametro è vero, ma quando scrivo nella classe Geppo all'interno del costruttore "$this->a" , mi riferisco ad un attributo che in teoria non dovrebbe esistere perchè non l'ho dichiarato...quindi mi sta sfuggendo qualcosa perchè non capisco come mai funzioni.... :confused: :confused:

les2
17-01-2017, 10:01
perchè il linguaggio di scripting non è così restrittivo da bloccarti.
la regola vuole che tu prima dichiari
$this->a
ma se lo dichiari nel costruttore lo digerisce ugualmente.
Non so se va bene anche in hack e hhvm però, dove c'è un passaggio di compilazione.

finchè sei nel reame interpretato molte inesattezze passano, coem in js ;)

mech666
17-01-2017, 15:46
Ottimo ora ho capito! :)

Avevo intuito una cosa del genere ma non pensavo php fosse così "di bocca buona"...ti ringrazio! ;)

les2
17-01-2017, 16:39
dipende anche dalla versione che stai usando
(tra 5.3, 5.6 e 7.1 ci sono discrete differenze)


butta un occhio a php the right way :)