Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    operatore :: e attributi di istanza della superclasse

    ciao

    il manuale dice:

    The Scope Resolution Operator (also called Paamayim Nekudotayim) or in simpler terms, the double colon, is a token that allows access to static, constant, and overridden members or methods of a class.

    Ma a me sembra che non permetta la lettuta di attributi d'istanza della superclasse e sovrascritti nella classe figlia. Tipo perche non mi lascia fare:

    Codice PHP:
    class Animal {
       public 
    $environment "The Earth\n";
    }

    class 
    Dolphin extends Animal {
       public 
    $environment "The Sea\n";
       public function 
    getEnv() {
          echo 
    $this->environment// buona questa
          
    echo parent::$environment// questa ammazza il compilatore
       
    }

    sono cofuso ;(


    grazie

  2. #2
    Le proprietà ed i metodi privati NON sono accessibili alle classi "figlie".

    Inoltre,

    Codice PHP:
    $this->$environment
    dovrebbe essere:

    Codice PHP:
    $this->environment
    E questo codice:

    Codice PHP:
    parent::$environment
    richiede che la proprietà environment venga definita come statica.

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si quelli erano errori del menga ...

    ma l'hai letta la definizione che ho riportato dal manuale!?

    "... and overridden members or methods of a class"

    grazie

  4. #4
    Originariamente inviato da nourdine
    ma l'hai letta la definizione che ho riportato dal manuale!?

    "... and overridden members or methods of a class"
    Che cosa ci trovi di scorretto?

    Codice PHP:
    <pre>
    <?php 
    error_reporting
    (E_ALL E_STRICT);
    ini_set('display_error'1);

    class 
    Animal {
       protected static 
    $environment "The Earth\r\n";
    }

    class 
    Dolphin extends Animal {
       protected static 
    $environment "The Sea\r\n";
       public function 
    getEnv() {
          echo 
    self::$environment;
          echo 
    parent::$environment;
       }
    }

    $d = new Dolphin();
    $d->getEnv();

    ?>
    </pre>

  5. #5
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    Codice PHP:
    <?php
    error_reporting
    (E_ALL E_STRICT);
    ini_set('display_error'1);

    class 
    Animal {
       protected 
    $environment "The Earth\r\n";
       public function 
    xxx() {
          echo 
    "metodo di istanza";
       }
    }

    class 
    Dolphin extends Animal {
       protected 
    $environment "The Sea\r\n";
       public function 
    getEnv() {
          echo 
    parent::$environment// errore - la prossima volta il compilatore lo scrivo io ;-p
          
    parent::xxx();
       }
    }

    $d = new Dolphin();
    $d->getEnv();

    ?>
    beh sai com'è ... uno puo accedere a metodi di istanza (xxx) e allora si aspetterebbe di poter fare lo stesso con gli attributi!

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Come già detto sopra l'errore è che devi definire l'attributo come statico, poi funziona.

  7. #7
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si ma capisci che i metodi di istanza sono accessibili via

    parent::nomeMetodo

    mentre gli attributi di istanza (variabili) NO?

    capisci che e' un'incosistenza del linguaggio?

    ho capito che li devo definire come statici ma quella e' un'altra storia. la mia critica era di tipo "architetturale" ...

    comunque grazie per l'aiuto

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    No, non è un'inconsistenza.
    Anche gli attributi (se sono statici e pubblici o protected) sono accessibili come
    parent::$attributo

  9. #9
    Originariamente inviato da nourdine
    si ma capisci che i metodi di istanza sono accessibili via

    parent::nomeMetodo

    mentre gli attributi di istanza (variabili) NO?
    Ma hai letto il codice che ho postato?

    Che cosa credi che faccia la seguente riga?

    Codice PHP:
    echo parent::$environment

  10. #10
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    Originariamente inviato da filippo.toso
    Ma hai letto il codice che ho postato?

    Che cosa credi che faccia la seguente riga?

    Codice PHP:
    echo parent::$environment
    quello che hai scritto legge un attributo statico, detto anche attributo di classe: concetto diverso da attributo di istanza!!!

    la storia e' che

    parent::whatever

    puo' accedere metodi di istanza ma non attributi di istanza!!!!!

    raga e' semplice ... e' un incosistenza ... php ne ha un miliardo

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.