Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Problemi OOP

  1. #1

    Problemi OOP

    Risalve, stavo riguardando la programmazione OOP ma è evidente che io e lei abbiamo litigato da piccini.

    Seguendo un semplice esempio con una classe che ha 2 propietà private e un metodo statico kabum questo è l'errore: Fatal error: Using $this when not in object context

    Codice PHP:
    <?php

    class myTest
    {

             
    $private $_firstName;
             
    $private $_lastName;

             public static function 
    printName $firstName$lastName )
             {

                   echo 
    'Ciao ... ' $this->setFirstName$firstName ). ' ' $this->setLastName $lastName ) . '!';

             }

             public function 
    setFirstName $firstName )
             {

                    
    $this->_firstName $firstName;
                    return 
    $this->_firstName;

              }

             public function 
    setLastName $lastName )
             {

                    
    $this->_lastName $lastName;
                    return 
    $this->_lastName;

             }

    }

    myTest::printName 'MioNome''MioCognome' );
    Ripeto che forse con la programmazione OO ho litigato da piccino ma cosa c'è che non va in questo esempio ?

    Grazie a tutti

  2. #2
    se una funzione è dichiarata 'static' non puoi usare $this al suo interno (ma lo puoi usare in altri metodi anche all'interno della stessa classe)

    devi riprendere il concetto di istanza di una classe e classe.

    http://php.net/manual/en/language.oop5.static.php

  3. #3
    Originariamente inviato da Ratatuia
    se una funzione è dichiarata 'static' non puoi usare $this al suo interno (ma lo puoi usare in altri metodi anche all'interno della stessa classe)

    devi riprendere il concetto di istanza di una classe e classe.

    http://php.net/manual/en/language.oop5.static.php
    Innanzi tutto grazie per la risposta ma non torna ugualmente.

    Avevo già provato quanto hai detto prima di postare ovvero a dichiarare il metodo non statico e
    richiamandolo secondo tutti i crismi

    Codice PHP:

    class myTest
    {

                      
    $private $_firstName;
                      
    $private $_lastName;
         
                      public function 
    printName $firstName$lastName )
                      {

                              
    $this->_firstName $firstName;
                              
    $this->_lastName $lastName;

                              echo 
    'Ciao ..... ' $this->_firstName ' ' $this->_lastName '!';
     
                       }

    }

    $name = new myTest();
    $name->printName 'mioNome''mioCognome' ); 
    ma è assolutamente uguale

    Grazie

  4. #4
    scusa, non mi ero accorto, ma $private è sbagliato, devi mettere private, public o protected senza il $ prima che viene usato solo anteposto al nome della proprietà e non alla sua visibilità

  5. #5
    Originariamente inviato da Ratatuia
    scusa, non mi ero accorto, ma $private è sbagliato, devi mettere private, public o protected senza il $ prima che viene usato solo anteposto al nome della proprietà e non alla sua visibilità
    No scusa tu ... è un errore che ho fatto riportando il testo qua nel forum. Nel file della classe private è dichiarato in modo giusto .

    ---

    Forse è meglio se metto due righe di spiegazione.
    Sto cercando di costruire un loader per le classi utilizzando le funzioni spl quindi ho bisogno di un metodo in entrata statico, che possiamo chiamare classImport, il quale si occupa di prendere in input un parametro formato da [sezione].[directoryDelleClassi].[nomeClasse] << concatenati da un punto dove nome classe è anche il nome della directory e del file che contiene la classe... ad esempio per un ipotetica classe per la gestione db sarebbe [sezioneDelSito->directoryDelleClassi->database] e il nome della classe sarebbe Database (class Database {.

    Dunque partendo dal presupposto che la funzione autoload si occupa di instanzare automaticamente la classe dopo averla caricata e che solitamente un progetto ha almeno 3 locazioni in cui "pescare" le classi:

    - [rootPrincipale->class] ... per le classi specifiche ad esempio per il sito
    - [rootPrincipale->common] ... dove risiedono le classi comuni a tutto il progetto
    - [rootPrincipale->admin-class] ... per le classi del pannello di controllo.

    A questo punto è facile immaginare che passando al metodo classImport i parametri giusti possa "comporre un path" da passare a sua volta ad una funzione autoload che si occupa del resto sfruttando o le potenzialità del metodo magico __autoload o quelle del spl_autoload che secondo me sono superiori.

    In pratica ovunque fosse necessario caricare una classe al interno del progetto basterebbe una dichiarazione del tipo:

    Codice PHP:
    classImport 'admin.class.nomeClasse' ); 
    per avere automaticamente a disposizione tutte le funzionalità della classe.

    Un pò come creare una funzione autoload che in base a 2 parametri determina dove prende la classe corrispondente.

    questo potrebbe essere un esempio, assumendo di avere una directory per tutte le classi e che questa si chiami class
    Codice PHP:
    function __autoload $class$path )
    {
               
    $classes $path '/' 'class' '/' 'class.' $class '.php'
               
    require_once $classes;
    }

    $class myTest(); 

  6. #6
    a me funziona normalmente

    codice:
    iMac:~ thinkindie$ php test.php 
    Ciao ..... mioNome mioCognome!iMac:~ thinkindie$

    Codice PHP:
    <?php
    class myTest 

        private 
    $_firstName
        private 
    $_lastName
        
        public function 
    printName $firstName$lastName ) { 
        
              
    $this->_firstName $firstName
              
    $this->_lastName $lastName
        
              echo 
    'Ciao ..... ' $this->_firstName ' ' $this->_lastName '!'
        
        }



    $name = new myTest(); 
    $name->printName 'mioNome''mioCognome' );
    ?>

  7. #7
    Originariamente inviato da Ratatuia
    a me funziona normalmente

    codice:
    iMac:~ thinkindie$ php test.php 
    Ciao ..... mioNome mioCognome!iMac:~ thinkindie$
    A me purtroppo da sempre quel errore.

  8. #8
    che versione di php hai?

  9. #9
    Originariamente inviato da Ratatuia
    che versione di php hai?
    Avevo pensato anche io la stessa cosa ma che io sappia questa è l'ultima:

    PHP Version 5.3.3-1ubuntu9.1

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.