Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    Comportamento public e private

    Salve.
    Stavo seguendo una guida di php sugli indicatori di visibilità, poi ad un certo punto ho fatto una prova:
    codice:
    <?php
    
    class MyClass {
             
            // proprietà
            private $a = 10;
            public  $b = 50;
            // metodi
            private function sayHello() {
                    echo "Hello!";
            }
             
            public function getAll() {
                    echo $this->a;
                    $this->sayHello();
            }
     
    }
     
    class AnotherClass extends MyClass {
     
            public function sayHelloAgain() {
                    $this->sayHello();
            }
     
    }
     
    $anotherClass = new AnotherClass();
     
    // stampa "10 Hello!"
    $anotherClass->getAll();
    echo "
    ";
    echo $myclass->a = 40; // cabia la proprietà private $a di MyClass
    echo "
    ";
    $anotherClass->getAll();
    echo "
    ";
    echo $myclass->a; // visualizza la proprietà cambiata
    echo "
    ";
    echo $myclass->a;
    echo "
    ";
    echo $anotherClass->b;
    echo "
    ";
    $anotherClass->getAll();
    
    ?>
    Cioè qualcuno mi sa dire come mai con $myclass->a accedo ad una variabile privata e ne cambio il suo valore?
    Almeno sul mio computer ho questo tipo di funzionamento.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Il codice che hai postato contiene un errore:
    a $myclass non è mai assegnato un valore. Manca infatti la riga di codice:
    codice:
    $myclass=new MyClass();
    infatti il codice che hai postato a me ritorna

    codice:
    10Hello!
    
    10Hello!
    
    Notice: Undefined variable: myclass in C:\Users\Ciro Pellegrino\Desktop\EasyPHP-5.3.9\www\index1.php on line 37
    
    Notice: Trying to get property of non-object in C:\Users\Ciro Pellegrino\Desktop\EasyPHP-5.3.9\www\index1.php on line 37
    
    
    Notice: Undefined variable: myclass in C:\Users\Ciro Pellegrino\Desktop\EasyPHP-5.3.9\www\index1.php on line 39
    
    Notice: Trying to get property of non-object in C:\Users\Ciro Pellegrino\Desktop\EasyPHP-5.3.9\www\index1.php on line 39
    
    50
    10Hello!
    ma anche se aggiungo il codice con cui $myclass è istanza della classe MyClass ottengo

    codice:
    10Hello!
    
    10Hello!
    
    Fatal error: Cannot access private property MyClass::$a in C:\Users\Ciro Pellegrino\Desktop\EasyPHP-5.3.9\www\index1.php on line 37
    Come dovrebbe essere. Forse hai solo i notice disabilitati e quindi non vedi le proteste di php quando utilizzi la variabile $myclass.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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.