Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Programmazione Orientata agli Oggetti in WordPress: Ereditarietà II

by
Length:LongLanguages:
This post is part of a series called Object-Oriented Programming in WordPress.
Object-Oriented Programming in WordPress: Inheritance I
Object-Oriented Programming in WordPress: A Summary

Italian (Italiano) translation by Piergiorgio Sansone (you can also view the original English article)

Nell'articolo precedente , abbiamo introdotto il concetto di ereditarietà object-oriented, abbiamo cercato di spiegarlo in parole povere, ed abbiamo dato uno sguardo anche al modello concettuale di come si inserisce in un contesto di programmazione.

Ma prima di andare avanti e/o se vi siete appena uniti a noi nella seire, rivedete tutto ciò che abbiamo visto fino ad ora leggendo gli articoli precedenti :

  1. L'Introduzione
  2. Le Classi
  3. I Types
  4. Le Strutture di Controllo : Istruzioni Condizionali
  5. Le Strutture di Controllo : I Cicli
  6. Funzioni ed Attributi
  7. L'ambito di applicazione (scopo)
  8. Costruire il Plugin I
  9. Costruire il Plugin II
  10. Documentare il Plugin I
  11. Documentare il Plugin II
  12. Ereditarietà I

Sì - abbiamo coperto molti argomenti,  ma per gettare le basi per un principiante,  c'è molto da esaminare per avere un ottimo posto da cui iniziare la scrittura orientata agli oggetti in PHP.

Detto questo, l'ereditarietà incomincia quando si entra  negli argomenti intermedi del paradigma, questo pertanto sarà l'ultimo articolo che fornisce una visione dei concetti per i principianti  dopo che completeremo  la serie con un post di riepilogo.

Recensione di ereditarietà

Ricordate che abbiamo definito l'ereditarietà come indicato di seguito:

L'ereditarietà è quando una classe funge da classe padre per una classe figlio che fornisce un numero di attributi e metodi comuni per il padre e il figlio; Tuttavia, il bambino ha  la capacità di introdurre gli attributi .

È un po' meno formale di quello che potete trovare in un libro accademico, o anche su Wikipedia, ma spiega l'idea in termini che illustrano il punto.

In questo articolo, esamineremo tutto il codice necessario, funzioni e parole riservate relazionate all'argomento, stiamo andando a dare un'occhiata a come possiamo realizzarlo all'interno di PHP in modo molto, molto semplice indipendente dalla piattaforma e quindi esamineremo un'implementazione effettiva di dove l'ereditarietà si manifesta  all'interno di WordPress.

Così impostata la nostra roadmap per l'articolo, andiamo avanti e iniziamo.

PHP: Servizi

Al fine di implementare l'ereditarietà in PHP orientato agli oggetti, ci sono un numero di parole riservate con cui dobbiamo familiarizzare. Per fortuna, la maggior parte delle parole la abbiamo già viste, e quelle che non sono abbastanza chiare, sono tali da ricordarle facilmente.

Quindi prima di immergerci nel codice, diamo un'occhiata a tutte le parole riservate del linguaggio che dobbiamo conoscere, cosicchè si possa iniziare a creare qualcosa di reale.

  • extends è una parola riservata che indica che una classe è il figlio di un'altra classe. Per esempio , nell'articolo precedente , un Post extends Content Questo lo vedremo prensto..
  • private è un attributo che viene applicato alla proprietà e funzioni e significa che sono accessibili solo all'interno della classe in cui sono definiti.
  • protected è simile a private con l'eccezione che le proprietà e i metodi che sono contrassegnati come tali, possono accedervi dalla classe specificata e classi figlio.
  • public è l'opposto di private in quanto significa che qualsiasi classe - la classe specificata, una sottoclasse, o una classe di terze parti - può accedere la proprietà o il metodo per modificare informazioni o chiamare la funzione.

È inoltre necessario avere familiarità con l'operatore ::, ma ne parleremo un po' più avanti nell'articolo quando cominceremo a  guardare  la pagina di codice.

E questo è tutto - non è niente di terribilmente scoraggiante E la cosa ancora migliore è che se avete seguito insieme a noi tutta questa serie,  è probabile che abbiate familiarità con ogni parola, salvo per extends.

Comunque, detto questo, cominciamo a lavorare su un esempio.

Qualche esempio di codice

Al fine di iniziare a scrivere qualche codice di esempio, abbiamo bisogno di definire esattamente che cosa è che stiamo cercando di modellare (dopo tutto, è ciò che il codice fa, non è vero?).

Coerentemente  con il tema utilizzato per tutta questa serie – soprattutto nell'ultimo articolo - avremo una classe padre chiamata Content e due classi figlio, ognuno delle quali sarà chiamata rispettivamente  Comment e Post.

Questo ci permetterà di vedere come proprietà e metodi esistono all'interno di una singola classe, e come i figli possono accedere gli attributi dei loro genitori, così come i genitori possono proteggere la loro proprietà e funzioni dai propri figli.

Ma l'implementazione bisognerà dimostrarla più che parlarne, quindi cerchiamo di scrivere il codice.

La Classe Padre

Nel nostro esempio, la classe padre  sarà il Content perché entrambe le sottoclassi - vale a dire, il Post e il Comment - sono tipi di contenuto che hanno informazioni univoche associate che non sono specifici per la classe Content.

La chiave per l'ereditarietà è quella di identificare tutte le proprietà e i metodi che sono comuni a tutte le classi e definirli nella classe padre o, nella nostra classe, Content.

Anche se questo può variare in base come si visualizza questo, Content verrà configurata  e comprende:

  • una data in cui il contenuto è stato pubblicato
  • un autore
  • un metodo per salvare il contenuto
  • un metodo per formattare il contenuto
  • un metodo per recuperare il contenuto
  • e un metodo per recuperare l'autore del contenuto

Prima vedremo il codice, poi ti spiegheremo tutto quello che sta succedendo con esso.

Come accennato in precedenza, abbiamo due attributi protected e un attributo private. Ricordare che questo significa che tutte le sottoclassi possono accedere al $publish_date e all' $author, ma solo il Content può accedere l'attributo di $content.

Si noti inoltre che gran parte del codice che vedete nella classe di cui sopra è di base orientato agli oggetti PHP. Non c'è niente che rislata che si rapporta direttamente con l'eredità, diversamente da alcuni dei modificatori di accesso che abbiamo dichiarato. Vale a dire che è relativamente comune al codice che abbiamo visto finora in questa esercitazione.

Una delle cose degne di nota è che la funzione privata è in grado di dimostrare due cose:

  1. Come le funzioni private sono accessibili solo all'interno del contesto della classe in cui sono definite.
  2. Distingue eventuali tag e slash dal contenuto in modo tale che il codice non venga salvato con il contenuto.

Naturalmente, questo codice non è connesso a un database o un file system o nulla, ma il punto rimane ancora.

Si noti che, nel codice precedente ci sono un paio di cose che noi abbiamo bisogno di aggiungere al fine di soddisfare requisiti di PHP. Sono oltre la portata di questo articolo, ma vale la pena di sottolinearli qui:

  • Il codice di date_default_time_set è necessario per impostare su off il fuso orario per cui il tempo può essere recuperato.
  • Il costruttore è responsabile dell'impostazione iniziale della data di pubblicazione del contenuto, e inizializza la proprietà autore su una stringa vuota. In modo tale che un Post può avere un proprio autore e anche il Commento può avere il proprio autore. Come vedremo più avanti, un commento può anche ignorare l'impostazione predefinita della data di pubblicazione.

Si noti inoltre che siamo in grado di recuperare il contenuto dal metodo read e siamo in grado di ottenere l'autore dalla funzione get_author.

Il Primo Figlio

Poi, andiamo avanti e creare la sottoclasse Post. In primo luogo, daremo un'occhiata al codice e poi vedremo come interagisce con la classe Content che abbiamo appena creato.

La classe appare piccola, giusto? Non ci sono proprietà  - perché le eredita dalla classe Content - e ci sono solo due funzioni, una delle quali è univoca alla classe - post.

Notate che nel costruttore, facciamo prima una chiamata al costruttore padre utilizzando l'operatore :: . Si può leggere molto di più su questo nel manuale, ma basti dire che l'operatore è riservato per fare riferimento un certo numero di cose differenti all'esterno della classe in cui è definito. Nel nostro caso, che è la chiamata al costruttore dell'elemento padre.

Successivamente, ho optato per impostare il mio nome come l'autore del post. Si noti che sto usando la parola chiave $this. Perché la sottoclasse eredita le proprietà dal relativo elemento padre, può riferirsi a queste proprietà se sono state definite al suo interno .

Si noti che questo è possibile non solo perché il Post estende il Contenuto ma perché la proprietà è contrassegnata come protected nel Content Se sono stati contrassegnati come private, questo non sarebbe possibile.

Il Secondo Figlio

Ora che abbiamo creato la classe Post, abbiamo anche la classe Comment che, ricordiamo, rappresenta qualcuno lasciando un un commento su un post. Fosse questo il codice a livello di produzione, non ci sarebbe molto più codice: Avremmo bisogno di mettere in relazione un commento ad un post, determinare se è un commento ad una risposta ad un commento esistente, segnano lo stato di un commento, e così via.

Ma ai fini della dimostrazione dell'ereditarietà, lasciamo fuori  tutto questo e concentriamoci solo sulle cose che possono guidare i concetti.

Come potete vedere , il codice del Comment non è molto diverso dal codice del post . A un grado - questo è buono perché dimostra che noi abbiamo sottratto le parti appropriate nella nostra classe di base.

In ogni caso, si noti che dopo costruiamo il commento, facciamo la nostra chiamata al costruttore genitore. Successivamente, definiamo il metodo add che è responsabile per prendere il commento in arrivo e quindi salvarlo passando l'autore del commento ed il contenuto con il metodo save.

La cosa bella è che il metodo save è già definito all'interno della classe base, che gestisce anche la formattazione mediante l'utilizzo di una funzione private, cosi guadagnamo la funzionalità come creiamo la nostra classe figlio.

Lavorando con l'esempio

Fatto ciò, lanciamo un paio di esempi per vedere come s'incastrano i pezzi tutti insieme. Per assicurarsi che questo codice venga eseguito,tutto ciò che serve è un web server , una directory su cui eseguire gli script PHP ed un editor di testo.

In primo luogo, creeremo un'istanza del Content e quindi che chiameremo un'istruzione di debug in modo che possiamo vedere ciò che costituisce un'istanza della classe.

Consentendo che tutto funzioni correttamente, si dovrebbe vedere tutto ciò di cui sopra.

Successivamente, andiamo avanti e creare un post. Poiché stiamo impostando tutte le informazioni nel contesto della classe, tutti abbiamo davvero bisogno di chiamare una funzione sulla classe per visualizzare le informazioni.

Ad esempio:

Ancora una volta, poiché tutto ciò che abbiamo istituito nello stesso codice, semplicemente chiamando il metodo illustra il concetto.

Infine, possiamo creare un commento, chiamare il metodo add su un'istanza della classe, tentare di passare un codice dannoso (solo per vedere che venga ripulito dal nostro codice). Se tutto va bene, si dovrebbe vedere la seguente:

E questo è tutto: la nostra semplice dimostrazione dell'ereditarietà.

Ereditarietà in WordPress

Quando si tratta di cercare l'ereditarietà in WordPress, la prima cosa che mi viene in mente - e probabilmente ad altri sviluppatori - è il Widget API. Il motivo per cui dico questo è perché l'API è arricchito con l'ereditarietà.

Certo, i widget possono essere creati senza utilizzare l'API, ma direi che è un passo falso nello sviluppo. Perché  complicarti le cose se già esiste  un fondamento nel posto giusto per farlo? Ma sto divagando.

La cosa bella di questa particolare API  è che si mette in mostra tutti i punti forti di programmazione object-oriented e di eredità al lavoro. Ad esempio, ecco un pezzo di codice di esempio prelevati direttamente dal Codex:

Ora che abbiamo coperto il modello concettuale, visto anche le parole chiave e metodologia, scritto il nostro codice e creato il nostro esempio, questo dovrebbe essere relativamente facile da seguire.

Ma ecco la cosa: uno dei modi migliori per arrivare meglio a scrivere qualsiasi tipo di codice è mettere continuamente in pratica i concetti. Cioè, per esplorare le idee scritte da altre persone che hanno fatto cose più avanzate che tu abbia fatto nel precedente lavoro.

Caso in questione, date un'occhiata al primo esempio fornito nel WordPress Codex. E se si lavora con una versione successiva di PHP che supporta funzionalità quali gli spazi dei nomi (un argomento leggermente più avanzato), quindi estrarre il secondo esempio, pure.

Più si esamina il codice e prendere in giro a parte, più siete imparare su di esso. Ma andando oltre questo in questo articolo ci porterà fuori del campo di applicazione di tutta la serie.

Alla fine

A questo punto, abbiamo coperto tutto il materiale di principiante necessario per porre le basi per una guida per principianti alla scrittura orientato agli oggetti PHP. Nell'articolo finale, ti forniremo una sintesi di tutto ciò che abbiamo coperto così che avrete un unico riferimento per le grandi idee che possono essere segnalibro, salvato o definita in seguito.

Inoltre, avremo un breve periodo di discussione su una serie di follow-up, ma salveremo che fino ad allora.

Per ora, se avete domande, commenti e/o feedback sul contenuto, codice o esempi di cui sopra, sentitevi liberi di farlo nella sezione commenti qui sotto.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.