Ma come mai nn fa caso al riferimento???

Salve a tutti ragazzi, anche di domenica non riesco a rilassarmi perche' mi son messo in testa che voglio imparare il PHP e sto cercando di scorciare il piu' possibile i tempi di apprendimento...

Ho trovato un articolo riguardante il funzionamento dei riferimenti, che pero' a me non funziona come dice lui...

Vi metto subito lo script che mi ha fatto realizzare:

<?php
class LookAndFeel
{
var $color;
var $size;
function LookAndFeel()
{
$this->color = 'white';
$this->size = 'medium';
}

//Funzione per ritornare il colore
function getColor()
{
return $this->color;
}

//Funzione per il ritorno della misura
function getSize()
{
return $this->size;
}

//Funzione per settare il colore
function setColor($color)
{
$this->color = $color;
}

//Funzione per far settare la misura
function setSize($size)
{
$this->size = $size;
}
}
//Creo la classe responsabile dell'output
class Stp
{
var $look;
var $output;

//Nel costruttore richiamo come argomento l'oggetto lookandfeel
function Stp($look)
{
$this->look = $look;
}

function buildOutput()
{
$this->output = 'il colore &egrave; '. $this->look->getColor() . ' e la misura '.$this->look->getSize();
}

function stampa()
{
$this->buildOutput();
return $this->output;
}
}
//Inizializzo l'oggetto
$looka = new LookAndFeel();
$out = new Stp($looka);
//Modifico qualche valore di LookAndFeel
$looka->setColor('red');
$looka->setSize('grande');
echo $out->stampa();
//echo "Il colore &egrave; ".$look->getColor()." e la misura ".$look->getSize();
?>

L'esercizio e' un esempio per far capire che tendenzialmente l'assegnazione di una variabile, o in questo caso di un altro oggetto, e' una copia al valore passato come parametro, e infatti i due metodi successivi all'inizializzazione dell'oggetto $out, non dovrebbero avere ripercussioni sullo stesso...

Utilizzo dovrebbero perche' a me invece cambiano i risultati, ovvero la stringa si modifica cambiando i valori impostati...

Perche' anche senza il riferimento (&) vengono modificati i valori di out???

Ahhh a proposito a chi potesse unteressare trovate l'articolo qui!

inviato 9 anni fa
Pr0v4
X 0 X

Scusatemi ma questa e' la sintassi di oop del PHP4???

Perche' ho visto pagine come questa

Che spiega la programmazione ad oggetti in un altro modo!

Ad esempio, il nome del costruttore e' __costruct() e non il nome della classe...

Posso continuare a studiare gli esempi precedenti e modificarli in PHP5??? Se si come mi consigliereste di proseguire per fare questa cosa?

Oppure, conoscete qualche buon tutorial per imparare, possibilmente con esempi, che aiuti a comprendere la programmazione ad oggetti con PHP5?

Grazie in anticipo!!!

risposto 9 anni fa
Pr0v4
X 0 X

Quell'articolo vecchiotto e si riferisce a PHP4, quando gli oggetti erano variabili come tutte le altre e l'assegnazione avveniva per copia.

Con PHP5 le cose sono cambiate in modo da allineare questo comportamento a quello degli altri linguaggi orientati agli oggetti, come il Java. Con PHP5 infatti l'assegnazione di un oggetto avviene per riferimento.

Con PHP4 l'istruzione $out = new Stp($looka); avrebbe creato una copia di $looka da passare al costruttore di Stp, con PHP5 invece viene passato l'oggetto $looka originale.

:bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Scusa Gianni se rispolvero questo post dopo un po' di tempo, ma sono tornato a studiarmi i riferimenti perche' mi interessa veramente apprendere il PHP in maniera concreta e aggiornata!!!

Sto leggendo il manuale di PHP alla sezione dei riferimenti e l'unica differenza tra il libro che stavo leggendo e il manuale e' che nel libro che sto consultando trovo la dichiarazione al riferimento fatta in questo modo:

$color = 'blue'; 
$settings['color'] = &$color;

mentre nel manuale e':

$a =& $b;

l'unica differenza e' che & e' attaccato all'operatore = invece che alla variabile...

Aiutami a capire, perche' la sintassi che conosco io e' diversa?

Il libro che sto consultando usa ancora lo stesso nome della classe per il nome del costruttore e non utilizza le proprieta' di visualizzazione... Da quale versione del PHP e' stata introdotta la precedente nomenclatura, se utilizzo questo codice un pochetto "sporco" e lo modifico fin dove arrivano le mie competenze, ovviamente andandomi a documentare anche sul maanuale, saro' capace di scrivere del buon codice?

Ah dimenticavo il libro che sto seguendo e': The PHP Antology Object Oriented Solutions Volume I

Grazie ancora!!

risposto 9 anni fa
Pr0v4
X 0 X

In questi 2 articoli trovi elencate le principali evoluzioni di PHP 5:

http://www.phpnews.it/articoli/php/le-novit%e0-di-php-5/

http://www.phpnews.it/articoli/php/php-5.1-note-aggiornamento/

L'operatore & pu essere attaccato o staccato dalla variabile, non importante. Stai attento che mentre in PHP 4 tutte le variabili (stringhe, array, oggetti) vengono passati per copia, da PHP 5.1 gli oggetti vengono passati per riferimento metre tutto il resto per copia.

:bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda