Metodi e proprietà statici
Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 17 di 91.
Proprio come le proprietà possono essere statiche, anche i metodi possono appartenere alla classe stessa anziché ai singoli oggetti. I metodi statici vengono chiamati direttamente sulla classe, senza dover prima creare un'istanza.
Dichiari un metodo statico usando la parola chiave static e lo chiami con il nome della classe e l'operatore :::
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
Output:
8
8I metodi statici funzionano bene con le proprietà statiche. Uno schema comune consiste nell'usare un metodo statico per gestire i dati condivisi della classe:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
Output:
2Nota che i metodi statici non possono usare $this perché non esiste un'istanza di un oggetto. Possono accedere solo alle proprietà statiche e ad altri metodi statici usando self::.
Punto chiave: I metodi statici sono utili per le funzioni di utilità che non richiedono lo stato di un oggetto o per gestire i dati a livello di classe. Forniscono funzionalità senza richiedere l'istanziazione di un oggetto.
Sfida
FacileCostruiamo un sistema di generazione degli ID che utilizza metodi e proprietà statici per creare identificatori univoci senza dover istanziare oggetti.
Creerai due file per organizzare il tuo codice:
IdGenerator.php: Definisci una classeIdGeneratorche gestisce la generazione di ID univoci utilizzando solo membri statici. La classe deve avere una proprietà statica privata$lastIdche inizia da0e una proprietà statica privata$prefiximpostata su"ID". Crea un metodo staticogenerate()che incrementa l'ultimo ID e restituisce una stringa formattata che combina il prefisso e il nuovo ID (come"ID1","ID2"e così via). Aggiungi un metodo staticosetPrefix($newPrefix)che modifica il prefisso e un metodo staticogetLastId()che restituisce il valore corrente di$lastId.main.php: Includi il file della classe IdGenerator. Genera due ID usando il prefisso predefinito e stampa ciascuno su una riga separata. Poi modifica il prefisso in"USER"usando il metodo statico, genera altri due ID e stampa ciascuno. Infine, stampa il numero dell'ultimo ID chiamando il metodo statico appropriato.
Ricorda che i metodi statici vengono chiamati direttamente sulla classe usando ClassName::methodName() e che, all'interno della classe, accedi alle proprietà statiche con self::$propertyName. Poiché non esiste un'istanza dell'oggetto, non puoi usare $this nei metodi statici.
L'output dovrebbe mostrare la progressione degli ID con prefissi diversi, dimostrando come le proprietà statiche mantengano i propri valori tra più chiamate ai metodi.
Provalo tu
<?php
// Includi il file della classe IdGenerator
require_once 'IdGenerator.php';
// TODO: Genera due ID usando il prefisso predefinito e stampa ciascuno su una riga separata
// TODO: Cambia il prefisso in "USER" usando il metodo statico
// TODO: Genera altri due ID e stampa ciascuno su una riga separata
// TODO: Stampa il numero dell'ultimo ID usando il metodo statico appropriato
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave $thisMetodiProprietàCostruttore (__construct)Distruttore (__destruct)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa parola chiave parent::Sovrascrittura dei metodiLa parola chiave finalClassi astratteRiepilogo - Gerarchia dei dipendenti7Incapsulamento
Pubblico, Protetto, PrivatoApprofondimento sui modificatori di accessoGetter e SetterOccultamento delle informazioniPromozione dei parametri del costruttore (8.0)Riepilogo - Sistema di gestione dei registri degli studenti10Concetti avanzati di programmazione a oggetti
Composizione vs ereditarietàDependency InjectionClassi anonimeEnumerazioni (PHP 8.1)Fibers (PHP 8.1)Approfondimento sulla clonazione degli oggettiGeneratori e iteratori13Modelli di progettazione, parte 2
Modello CommandModello AdapterModello DecoratorModello Template MethodModello StateModello CompositeModello Repository2Namespace e autoloading
Introduzione ai namespaceLa keyword useStandard di autoloading PSR-4Autoloader di ComposerRiepilogo - Progetto organizzato5Interfacce e contratti
Introduzione alle interfacceImplementare le interfacceImplementare più interfacceInterfaccia vs classe astrattaType hinting con le interfacceRiepilogo - Calcolatore di forme8Metodi magici
Introduzione ai metodi magici__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e clonazione degli oggetti__serialize e __unserializeRiepilogo - Collezione personalizzata11Sistema dei tipi e gestione degli errori
Dichiarazioni di tipoTipi nullableTipi unione e intersezioneClassi di eccezioneGerarchia di eccezioni personalizzataTry, Catch, FinallyRiepilogo - Validatore di moduli14Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Proprietà delle classi
Proprietà di istanza e staticheCostanti nelle classiMetodi e proprietà staticiProprietà private e protectedProprietà readonly (PHP 8.1)Riepilogo - Gestore di conti bancari6Polimorfismo
Ridefinizione dei metodi, ripresaPolimorfismo tramite interfacceSuggerimenti sui tipi e tipi UnionBinding statico tardivoRiepilogo - Processore di pagamenti9Tratti
Introduzione ai trattiUtilizzare più trattiRisoluzione dei conflitti tra trattiMetodi astratti nei trattiTratti vs ereditarietà12Design pattern - Parte 1
Introduzione ai design patternPattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore PHP online