Funzione Interface [PHP+ OOP]

Salve,

chiedo per cortesia se qualcuno sa come si implementa la funzionalità interface con le classi in PHP 5?

Grazie per tutte le risposte, Marco.

PS e OT alt+s con Firefox sotto Windows, non invia il contenuto del post al forum, ma apre la finestra di salvataggio dei files.

inviato 10 anni fa
Marco Grazia
X 0 X

Ecco un piccolo esempio di impiego delle interfacce, tratto dall'articolo Le novità di PHP 5:

<?php
interface interfaccia_1
{
    /* metodi astratti */
    function funzione1();
}

interface interfaccia_2
{
    /* metodi astratti */
    function funzione2();    
}

/* classe che implementa 2 interfacce */
class classe_test implements interfaccia_1, interfaccia_2
{
    function funzione1() {
        /* implementazione */
    }
    
    function funzione2() {
        /* implementazione */
    }
}
?>

Se vuoi approfonire l'argomento ti consiglio questi articoli:

http://www.devshed.com/c/a/PHP/Userdefined-Interfaces-in-PHP-5-Introduction-to-Core-Concepts/

http://www.devshed.com/c/a/PHP/Userdefined-interfaces-in-PHP-5-Implementing-XHTML-Widgets/

http://www.devshed.com/c/a/PHP/Userdefined-Interfaces-in-PHP-5-Turning-MySQL-Classes-into-Interface-Implementers/

http://www.devshed.com/c/a/PHP/Userdefined-Interfaces-in-PHP-5-Building-a-Page-Generator/

 :bye:

P.S.: a me alt+s funziona  ???

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ti consiglio anche di dare un'occhiata alle interfacce supportate nativamente dalla SPL:

http://www.php.net/~helly/php/ext/spl/

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Sì quegli esempi sono tutti interessanti, ma quello che non spiegano chiaramente è se con interface si riesca oltre che a dare un'interfaccia predefinita per la/le classi che sottostanno ad essa, a impedire l'introspezione del codice e quindi di costruire classi "a scatola chiusa", penso di sì, ma sostanzialmente non l'ho trovato scritto da nessuna parte.

Marco.

PS: minchia quanto è lento devshed

risposto 10 anni fa
Marco Grazia
X 0 X

Forse non ho ben compreso cosa intendi dire con costruire classi "a scatola chiusa" comunque le interfaccie in PHP impongono come unico vincolo alle classi che ne fanno uso di realizzare l'implementazione di determinati metodi. Niente di più.

In PHP l'information hiding si può ottenere sono con i modificatori di accesso. Non credo che le interfacce possano aiutare in questo contesto.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Allora: mi sono andato a rileggere il capitolo sulla OOP nella Bibbia del PHP5 e in particolare sulle interfacce dice pochissimo, ma quel poco è ben scritto devo dire.

In pratica dice chiaro e tondo che servono solo a passare i metodi relativi alle classi che sottendono e null'altro; sono delle specie di wrapper per le classi, in modo da uniformare il modo di passaggio dei vari metodi che le classi stesse esportano, a beneficio della riusabilità del codice. Bene.

Ciò che vorrei realizzare invece, sono delle classi ad uso semplice, delle scatole chiuse a cui un input in ingresso da un output, ma senza ulteriore possibilità di modifica per evitare modifiche alla classe stessa non voluta dal programmatore che le ha implementate, cioè in sostanza, la possibilità di non essere estese con la modalità extended, questo solo per poter creare un'applicazione a oggetti, dove ogni oggetto si comporti come un mattone, una scatola, che fa qualcosa e sempre quella e chi la manipola, possa così costruire un'applicazione usando solo ciò che ha.

Un po' come il vecchio linguaggio Logo, che permetteva di fare certe cose predefinite e con esse costruire delle semplici applicazioni; insomma sto lavorando ad un progetto per un gestionale e vorrei usare questo approccio per realizzarne i moduli.

Marco.

risposto 10 anni fa
Marco Grazia
X 0 X

Per ottenere il risultato che desideri ti basta usare "final":

http://it.php.net/manual/it/language.oop5.final.php

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ottimo!

Ora me la studio un poco.

risposto 10 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda