Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Sostituire funzione

  1. #1

    Sostituire funzione

    Ciao a tutti,
    è possibile effettuare l'override di una funzione (contenuta in una classe)?

    Sto scrivendo un plugin per Wordpress e avrei la necessità di sostituire in toto una funzione contenuta in una classe che è presente in un file PHP, naturalmente senza andare a modificare questo file per preservare la 'modularità' dei plugin.

    Grazie!
    Stefano

  2. #2
    Certo che è possibile, prova e vedrai

  3. #3
    graaaazie!

    Ma quando si estende una classe si riesce ad ottenere una nuova classe con relative funzioni, derivata in parte dalla classe estesa, non il contrario: io dovrei sostituire una funzione in una classe esistente.
    Stefano

  4. #4
    Allora, quando estendi una classe in PHP, tale classe eredita tutte le funzioni public e protected.
    Il termine override sta a significare che riscrivi una funzione ereditata dalla superclasse: per fare questo basta ridefinirla nuovamente, con lo stesso nome e numero di parametri.
    Se invece vuoi proprio sostituire la funzione con un'altra, nessuno ti vieta di aprire quel file

  5. #5
    Ok, grazie!
    Negli esempi su PHP la classe nell'override ha sempre nome diverso e pensavo non fosse possibile.
    Stefano

  6. #6
    Originariamente inviato da peste1
    Ok, grazie!
    Negli esempi su PHP la classe nell'override ha sempre nome diverso e pensavo non fosse possibile.
    Questa non l'ho capita
    L'override è appunto il meccanismo che ti permette di ridefinire un metodo della superclasse.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Escludendo la modifica della classe/funzione (devo scrivere un plugin, quindi qualcosa che va ad inserirsi ed integrarsi su quello che è preesistente), dovrei sostituire la funzione redirect della classe già presente MP_AdminPage.

    A logica scriverei:

    Codice PHP:
    class Test extends MP_AdminPage {
     public static function 
    redirect() {
      echo 
    "Estende";
     }

    A questo punto richiamando la funzione redirect di MP_AdminPage non avviene l'override, ma la mia classe Test con funzione redirect eredita tutta MP_AdminPage e ne sostituisce solo redirect. Dovrei fare il contrario.
    Stefano

  8. #8
    Originariamente inviato da peste1
    Escludendo la modifica della classe/funzione (devo scrivere un plugin, quindi qualcosa che va ad inserirsi ed integrarsi su quello che è preesistente), dovrei sostituire la funzione redirect della classe già presente MP_AdminPage.

    A logica scriverei:

    Codice PHP:
    class Test extends MP_AdminPage {
     public static function 
    redirect() {
      echo 
    "Estende";
     }

    A questo punto richiamando la funzione redirect di MP_AdminPage non avviene l'override, ma la mia classe Test con funzione redirect eredita tutta MP_AdminPage e ne sostituisce solo redirect. Dovrei fare il contrario.
    Mi sa che hai le idee confuse sul concetto di override.

    Originariamente inviato da peste1
    ...A questo punto richiamando la funzione redirect di MP_AdminPage non avviene l'override...
    E' ovvio che se chiami il metodo redirect della classe MP_AdminPage non avviene alcun override, devi invocare il metodo redirect della classe Test.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Grazie mille per la velocità!
    Come dicevo nel post di apertura avrei la necessità di sostituire alcuni funzioni della classe (chiaramente se possibile) e pochi post dopo dicevo che con l'estensione della classe (extends => override) non è possibile in quanto devo fare l'inverso.

    Devo fare in modo che la funzione redirect della classe MP_AdminPage venga sostituita da una mia classe + funzione che viene caricata nel plugin in modo da preservare la modularità del sistema.
    Stefano

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.