Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    [php]classi ed estensioni

    buonasera

    può una classe php estendere se stessa runtime? se si, con che logica e limiti?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  2. #2
    Intendi dire attraverso i magic methods come __call, __get, __set?

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    direi di si, se questi possono rappresentare la mia soluzione... link utili?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    il mio scopo è quello di creare ed eliminare metodi runtime all' interno di una classe. sò che c'è ovviamente la possibilità di estendere una classe, ma se volessi delegare il lavoro a se stessa?

    cioè la classe pippo la quale, tramite una funzione creata da me, si estenda (magari utilizzando self per esempio)
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  6. #6
    Non sono sicuro di aver capito perfettamente, ma forse intendi una cosa del genere?

    Codice PHP:
    <pre>
    <?php

    class MyClass {
        public function 
    __call($name$arguments) {
            if (
    function_exists($name)) {
                
    $name($this$arguments);
            }
        }
    }

    function 
    my_function (&$obj$arguments) {
        
    print_r($arguments);
    }

    $obj = new MyClass();
    $obj->my_function('arg 1''arg 2');

    ?>
    </pre>

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    NI

    mi spiego meglio....
    Codice PHP:
    class pippo{
      function 
    createMethod($name,$args,$code){
        if (!
    /*non esiste come metodo di questa classe*/){
          
    /*estendi pippo (o self?) con un metodo di nome $name, che accetta $args, il cui codice è $code*/
          
    }
        }
      
      
      } 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Quello che ho scritto mi fa un po' vergognare, ma non saprei in che altro modo si possa implementare quello che chiedi:

    Codice PHP:
    <pre>
    <?php

    class MyClass {

        var 
    $_methods = array();

        function 
    createMethod($name$args$code){ 
            
    $this->_methods[$name]['code'] = $code;
            
    $this->_methods[$name]['args'] = $args;
        }
     
        function 
    __call($name$args) {
            if (!
    method_exists($this$name) && isset($this->_methods[$name])) {
                if (
    count($args) == count($this->_methods[$name]['args'])) {
                    
    $args array_combine($this->_methods[$name]['args'], $args);
                    return 
    $this->_call_method($this->_methods[$name]['code'], $args);        
                }
            }
        }

        function 
    _call_method($___code$___arguments) {
            
    extract($___arguments);
            return eval(
    $___code);
        }    
        
    }


    $obj = new MyClass();
    $obj->createMethod('my_function', array('arg1''arg2'), 'print("{$arg1}\r\n"); var_dump($arg2);');
    $obj->my_function('arg 1''arg 2');

    ?>
    </pre>

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    io nn capisco come una cosa del genere possa essere utile a qualcuno. Boh, forse perché ho avuto a che fare (temporalmente parlando) con Pascal/C/C++, cui questo genere di cose sono estranee...
    magari spiegando meglio il problema si possono proporre soluzioni diverse.
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  10. #10
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    rieccomi qui

    grazie intanto a filippo, la strada penso sia quella giusta, stasera farò delle verifiche e dei test e proverò.


    @Hysoka:

    la 'cosa del genere' è utile, se non utilissima, e questa mia domanda è parte di un progetto ben più grande e complesso.
    Fondamentalmente si tratta di riuscire, in termini logici, a replicare certe peculiarità di altri linguaggi applicate ai dati gestiti da php.

    a partire dal presupposto che php mette a disposizioni la possibilità di salvare gli stati dele classi (se pur in certi versi limitata) tramite serializzazione delle stesse e quindi la ricostruzione della stessa in sessioni di lavoro successive.

    un astratto del mio intento:

    Codice PHP:
    $t=new MainClass;
    $t->variabile=10;
    $t->addEventListner('change','variabile','if (variabile > 10) echo "maggiore di 10";'); 
    nella struttura portante della classe MainClass verrà gestito una sorta di 'listner' virtuale , il quale sarà richiamato al momento giusto sul dato richiesto.

    Per qualcuno potrà sembrare una snaturalizzazione, un' accrocchio o una porcata, ma ha un suo valore pratico.

    Sono aperto a tutte le opinioni
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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.