Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    bloccare il call di una funzione

    salve, io ho un codice così strutturato
    Codice PHP:
    class A{
    protected function 
    fa(){}
    protected function 
    fb(){}
    public function 
    fc(){}
    public function 
    fd(){}
    }
    class 
    extends A{
    public function 
    fb(){ parent::fb();}
    }
    class 
    extends A{
        public function 
    __call($m$a){
            echo 
    "errore";
        }

    Ora, se creo un'istanza di E posso richiamare fb(), fc() e fd()
    Se creo un'istanza di A vorrei poter non richiamare nessuna funziona...ma con la funzione che ho scritto mi richiama cmq le funzioni pubbliche di A. Non posso modificare A portando i metodi fc() e fd() a protected.
    Come posso fare?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    se tu non puoi modificare A fintantoche i suoi metodi rimangono pubblici li puoi chiamare

    Hai utilizzato

    Codice PHP:
     class extends A{
         public function 
    __call($m$a){
             echo 
    "errore";     }
     } 
    con l' idea di creare una classe F che estende A ed avvisa chi cerca di usare una funzione non accessibile

    il problema e' che invece la funzione rimane accessibile

    io ti suggerisco di fare cosi:

    Codice PHP:
    class extends A{
    public function 
    fc(){
    echo 
    "errore";
    }
    public function 
    fd(){
    echo 
    "errore";
    }

    fai l' ovverloading dei metodi pubblici ( purtroppo mi pare che l' overloading puo essere fatto solo con metodi pubblici)
    ridefinendo i metodi puoi fare in modo che chiamandoli ti restituisca "errore"
    lo svantaggio in questo modo e' che lo devi fare per ogni metodo( ma finche' sono due...)

    Nel caso in cui utilizzi A direttamente il problema ti rimane



    ti mando un link che potrebbe essere un' altra strada che prevede il casting da una classe ad un' altra; pensa di ridefinire a in modo simile ma con i membri privati
    crei un oggetto a e ne fai il casting


    http://www.php.net/manual/en/languag...ling.php#31781

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    l'overloading in php non è possibile a meno di un estensione sperimentale...magari lo fosse...forse tu intendevi overriding
    in ogni caso è possibile anche su metodi protected
    sui private no, per ovvie ragioni

    purtroppo i metodi sono 7 o forse 8, io ho riportato solo uno schema....mica trascrivevo 500 righe di codice per far infartare chiunque entrasse nel topic

    se nessun altro ha altre soluzioni mi troverò obbligato a fare un overriding di 7 o 8 metodi in una decina di funzioni

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  4. #4
    io mi riferivo a questa parte del manuale

    http://www.php.net/manual/en/languag...verloading.php

    e parlano di overloading

    sul funzionamento pero' ci siamo capiti
    (in effetti la dinamica e' visibile meglio qui: http://www.php.net/manual/en/languag...nheritance.php )


    mi dispiace che i metodi da ridefinire non siano solo due ma valuta tu se devi cercare un trucco per farlo via codice ripetitivo (sara' possibile ?????? ne vale la pena ????) o farlo manualmente.

  5. #5
    giusto per completezza, questo non è un overloading ma per l'appunto un overriding, come ha detto oronze

    proprio da quella pagina:
    PHP's interpretation of "overloading" is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments.
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.