Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36
  1. #1

    Stupido problema gerarchia classi -.-"

    Sera popolo!
    Mi ritrovo con questo stupido problema che non riesco a risolvere...

    content.php: Questa classe salva i dati in argument.
    Codice PHP:
    <?php
    class content{
        protected 
    $_app;
        protected 
    $_action;
        protected 
    $_argument;
        
        function 
    __construct($app$action$argument=array()){
            ...
        }
        
        function 
    set($name$value){
            
    $this->_argument[$name]=$value;
        }
        
        function 
    __destruct(){
            ...
        }
        
    }
    post.php: Questa classe dovrebbe inserire un dato in $_argument della prima classe...
    Codice PHP:
    <?php
    class post extends content{
        function 
    viewall(){
            
    $this->set('prova''azunyan!');
        }
        
    }
    Ma:

    Fatal error: Using $this when not in object context in C:\wamp\www\library\post.php on line 4


    Se invece le inverto cosi:
    content.php:
    Codice PHP:
    <?php
    class content extends post{
    ...
    post.php
    Codice PHP:
    <?php
    class post{
    ...
    Funziona. Solo che non posso fare questa inversione! Content dovrebbe essere la classe principale per caricare le altre richieste dall'utente. Non posso mettere mille "extends" in content per ogni altra classe... Cosi' il software diventerebbe difficilmente espandibile.

    C'è qualcuno che sa aiutarmi?!

    Saluti.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Spiacente ma quello che hai postato non da nessun problema:
    Codice PHP:
    <?php 
    class content
        protected 
    $_app
        protected 
    $_action
        protected 
    $_argument
         
        function 
    __construct($app$action$argument=array()){ 
            
    $this->_argument=$argument;
        } 
         
        function 
    set($name$value){ 
            
    $this->_argument[$name]=$value
        } 
         
        function 
    __destruct(){ 
             
        } 
         
        public function 
    __toString() {
            return 
    print_r($this->_argument,true);
        }


    class 
    post extends content
        function 
    viewall(){ 
            
    $this->set('prova''azunyan!'); 
        }          



    $p=new post('Pippo','Pluto');
    $p->viewall();
    echo 
    $p;
    ?>
    Output:
    codice:
    Array ( [prova] => azunyan! )
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Ok. Ma se lo divido in più files non funziona più.
    Esempio:

    avvia.php:
    Codice PHP:
    <?php
    require_once 'content.php';
    require_once 
    'post.php';

    $p=new post('Pippo','Pluto');
    $p->viewall();
    echo 
    $p;
    content.php:
    Codice PHP:
    <?php 
    class content
        protected 
    $_app
        protected 
    $_action
        protected 
    $_argument
         
        function 
    __construct($app$action$argument=array()){ 
            
    $this->_argument=$argument;
        } 
         
        function 
    set($name$value){ 
            
    $this->_argument[$name]=$value
        } 
         
        function 
    __destruct(){ 
             
        } 
         
        public function 
    __toString() {
            return 
    print_r($this->_argument,true);
        }
    }
    post.php:
    Codice PHP:
    <?php
    class post extends content
        function 
    viewall(){ 
            
    $this->set('prova''azunyan!'); 
        }          
    }

    Mi da questo errore:
    Fatal error: Class 'content' not found in C:\wamp\www\public\test\post.php on line 2

    Come risolvo? Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da KingAntony
    Ok. Ma se lo divido in più files non funziona più.
    Esempio:

    avvia.php:
    Codice PHP:
    <?php
    require_once 'content.php';
    require_once 
    'post.php';

    $p=new post('Pippo','Pluto');
    $p->viewall();
    echo 
    $p;
    content.php:
    Codice PHP:
    <?php 
    class content
        protected 
    $_app
        protected 
    $_action
        protected 
    $_argument
         
        function 
    __construct($app$action$argument=array()){ 
            
    $this->_argument=$argument;
        } 
         
        function 
    set($name$value){ 
            
    $this->_argument[$name]=$value
        } 
         
        function 
    __destruct(){ 
             
        } 
         
        public function 
    __toString() {
            return 
    print_r($this->_argument,true);
        }
    }
    post.php:
    Codice PHP:
    <?php
    class post extends content
        function 
    viewall(){ 
            
    $this->set('prova''azunyan!'); 
        }          
    }

    Mi da questo errore:
    Fatal error: Class 'content' not found in C:\wamp\www\public\test\post.php on line 2

    Come risolvo? Grazie.
    Hai incluso il file dell'altra classe?

  5. #5
    Ho incluso le due classi in avvia.php.
    Comunque ora funziona ma il problema è questo:
    Fatal error: Using $this when not in object context in C:\wamp\www\test\post.php on line 5

    avvia.php:
    Codice PHP:
    <?php

    error_reporting
    (1);

    function 
    __autoload($classname){
        require_once 
    $classname.'.php';
    }

    $content=new content('post''viewall');
    content.php:
    Codice PHP:
    <?php
    class content{
        protected 
    $_app;
        protected 
    $_action;
        protected 
    $_argument;
        
        function 
    __construct($app$action$argument=array()){
            
    $this->_app=$app;
            
    $this->_action=$action;
            
    $this->_argument=$argument;
        }
        
        function 
    set($name$value){
            
    $this->_argument[$name]=$value;
            echo 
    $name;
        }
        
        function 
    __destruct(){
            if(
    method_exists($this->_app$this->_action)){
                
    extract($this->_argumentEXTR_PREFIX_SAME"argument");
                
    call_user_func_array(array($this->_app$this->_action), $this->_argument);
                require_once 
    ROOT.DS.'app'.DS.$this->_app.DS.$this->_action.'.php';
            }else{
                echo 
    "404";
            }
        }
        
    }
    post.php:
    Codice PHP:
    <?php
    class post extends content
        function 
    viewall(){
            
    $this->set('prova''azunyan!'); 
        }          
    }
    Ho aggiornato il codice.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da KingAntony
    Ho incluso le due classi in avvia.php.
    Comunque ora funziona ma il problema è questo:
    Fatal error: Using $this when not in object context in C:\wamp\www\test\post.php on line 5

    avvia.php:
    Codice PHP:
    <?php

    error_reporting
    (1);

    function 
    __autoload($classname){
        require_once 
    $classname.'.php';
    }

    $content=new content('post''viewall');
    content.php:
    Codice PHP:
    <?php
    class content{
        protected 
    $_app;
        protected 
    $_action;
        protected 
    $_argument;
        
        function 
    __construct($app$action$argument=array()){
            
    $this->_app=$app;
            
    $this->_action=$action;
            
    $this->_argument=$argument;
        }
        
        function 
    set($name$value){
            
    $this->_argument[$name]=$value;
            echo 
    $name;
        }
        
        function 
    __destruct(){
            if(
    method_exists($this->_app$this->_action)){
                
    extract($this->_argumentEXTR_PREFIX_SAME"argument");
                
    call_user_func_array(array($this->_app$this->_action), $this->_argument);
                require_once 
    ROOT.DS.'app'.DS.$this->_app.DS.$this->_action.'.php';
            }else{
                echo 
    "404";
            }
        }
        
    }
    post.php:
    Codice PHP:
    <?php
    class post extends content
        function 
    viewall(){
            
    $this->set('prova''azunyan!'); 
        }          
    }
    Ho aggiornato il codice.
    Devi richiamare il metodo mandando un istanza della classe

    Codice PHP:
    call_user_func_array(array(new $this->_app$this->_action), $this->_argument); 

  7. #7
    Che vuol dire? In che senso richiamare il metodo?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da KingAntony
    Che vuol dire? In che senso richiamare il metodo?
    Codice PHP:
    array(new $this->_app$this->_action
    Manda l'istanza della classe($this->_app) per richiamare il suo metodo/funzione($this->_action)


    Provando in locale cosi funziona e non mi da nessun errore

  9. #9
    La classe "post" esiste, la funzione "viewall" nella classe post esiste ma stampa "404".

    Codice PHP:
    if(method_exists($this->_app$this->_action)){
                
    extract($this->_argumentEXTR_PREFIX_SAME"argument");
                
    //call_user_func_array(array($this->_app, $this->_action), $this->_argument);
                
    call_user_func_array(array(new $this->_app$this->_action), $this->_argument);
                
    //require_once ROOT.DS.'app'.DS.$this->_app.DS.$this->_action.'.php';
            
    }else{
                echo 
    "404";
            } 
    -------------------------------------

    Se faccio cosi
    Codice PHP:
    if(method_exists($this->_app$this->_action)){
                echo 
    "esiste";
            }else{
                echo 
    "non esiste";
            } 
    mi stampa esiste. Se aggiungo il call_user_func_array() mi stampa 404.
    Perchè!?!?!!

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da KingAntony
    La classe "post" esiste, la funzione "viewall" nella classe post esiste ma stampa "404".

    Codice PHP:
    if(method_exists($this->_app$this->_action)){
                
    extract($this->_argumentEXTR_PREFIX_SAME"argument");
                
    //call_user_func_array(array($this->_app, $this->_action), $this->_argument);
                
    call_user_func_array(array(new $this->_app$this->_action), $this->_argument);
                
    //require_once ROOT.DS.'app'.DS.$this->_app.DS.$this->_action.'.php';
            
    }else{
                echo 
    "404";
            } 
    -------------------------------------

    Se faccio cosi
    Codice PHP:
    if(method_exists($this->_app$this->_action)){
                echo 
    "esiste";
            }else{
                echo 
    "non esiste";
            } 
    mi stampa esiste. Se aggiungo il call_user_func_array() mi stampa 404.
    Perchè!?!?!!
    Credo che sia dovuto all'extends della classe, infatti estende la classe content
    e quindi viene riletto il __destruct() quando è istanziata, e dato che non vengono
    passati nuovi valori da quell'errore

    ps: non estendendo la classe non da l'errore infatti

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.