Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Una cosa strana con esempio su operatore clone

    Ciao,
    mi stò studiando l'ottima guida di PHP OO di HTML.it, ho fatto la lezione che riguarda l'operatore clone.

    Questo è il codice:

    codice:
    <?php
    
    class Foo {
        public $foo = 10;
    }
    
    class A{
    
        // PROPRIETÀ:
        public $a = 10;
        public $b = 20;
        public $c = 30;
        public $d;            // E' inizialmente dichiarata senza valore specificato
    
        /* COSTRUTTORE: Quando costruisce l'oggetto istanza di Aassegna a d il
         * riferimento ad un nuovo oggetto istanza di Foo */
        public function __construct() {
            $this->d = new Foo();
        }
    
    }
    
    $obj1 = new A();        // Costruisce un nuovo oggetto istanza di A
    $obj2 = clone $obj1; // Mette in obj2 il riferimento aduna copia clonata di obj2
    
    /* Modifica il valore della variabile foo dell'oggetto a cui si riferisce la
     * proprietà e dell'oggetto clonato obj2 */
    $obj2->e->foo = 20;
    
    /* Stampa il valore della variabile foo dell'oggetto puntato dalla proprietà e
     * dell'oggetto clonato obj2 */
    echo $obj2->e->foo . "
    ";
    
    /* Stampa il valore della variabile foo dell'oggetto puntato dalla proprietà e
     * dell'oggetto originale obj1: è stato modificato anche l'originale */
    echo $obj1->e->foo . "
    ";
    
    ?>
    La cosa strana è che se vado a far girare tale script mi viene visualizzato solo uno dei due risultati degli echo finali (questo: echo $obj2->e->foo . "
    " mentre quello riferito alla proprietà foo dell'oggetto istanza della classe Foo il cui riferimento è nella proprietà e dell'oggetto obj1 non viene visualizzato...come mai? eppure...io creando l'oggetto il cui riferimento è in obj1 automaticamente con il suo costruttore creo anche l'oggetto istanza di foo e ne attribuisco il riferimento al relativo campo foo....mi pare molto strano...

    Spero di essere stato abbastanza chiaro nello spiegarlo...ma basta far girare questo semplice codice per capire...come mai? qualche idea? E' pari pari alla guida tra l'altro...mi sfugge qualcosa?

    Grazie
    Andrea

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    magari al posto di $obj2->e.. $obj1->e.. volevi scrivere $obj2->d.. $obj1->d.. ?

  3. #3
    Originariamente inviato da bubi1
    magari al posto di $obj2->e.. $obj1->e.. volevi scrivere $obj2->d.. $obj1->d.. ?
    ops...rincoglionimento...devo smettere di smanacciare di notte mi sà :-)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.