PHP ondersteunt klassen en andere objectgeoriënteerde constructies. Statische functies en variabelen in PHP-klassen zijn niet gekoppeld aan een specifiek exemplaar van de klasse (met andere woorden, een object). Zie het verschil tussen voorwerp en klasse.
In plaats daarvan zijn statische functies en variabelen gekoppeld aan de klassendefinitie zelf. Met andere woorden, alle exemplaren van een klasse delen dezelfde statische variabele. Binnen de context van een methode (functie) van een klasse worden statische variabelen en functies benaderd met behulp van zelf::
. Andere methoden en variabelen worden gebruikt in de context van een object (een instantie) van een klasse, met behulp van this->
.
zelf | deze | |
---|---|---|
Kan worden gebruikt in statische functies | Ja | Nee |
toegankelijke klassenvariabele en methoden met | zelf:: | $ this-> (Merk op dat PHP> 5.3 het gebruik van $ this toestaat met statische variabelen $ this :: $ foo. $ this-> foo zal nog steeds ongedefinieerd zijn als $ foo een statische var is.) |
Heeft een geïnstantieerd object nodig | Nee | Ja |
class exampleClass public static $ foo; openbare $ balk; public function regularFunction () echo $ this-> bar; public static function staticFunction () echo self :: $ foo; public static function anotherStatFn () self :: staticFunction (); public function regularFnUsingStaticVar () echo self :: $ foo; // OPMERKING: Vanaf PHP 5.3 met $ this :: $ bar in plaats van self :: $ bar is toegestaan exampleClass :: $ foo = "Hello"; $ obj = new exampleClass (); $ obj-> bar = "World!"; exampleClass :: staticFunction (); / * print Hallo * / $ obj-> regularFunction (); / * print World! * /
Statische functies kunnen alleen statische variabelen gebruiken. Statische functies en variabelen worden gerefereerd via zelf::functionName () of zelf::variableName. In het bovenstaande voorbeeld wordt naar statische variabelen verwezen met de klassenaam (exampleClass :: $ foo) of, met een zelf:: (self :: $ foo) wanneer gebruikt binnen de statische methode [genaamd staticFunction ()] van de klas.
Reguliere functies en variabelen van een klasse hebben een objectcontext waarnaar moet worden verwezen. Ze kunnen niet bestaan zonder een objectcontext. De context van het object wordt geleverd door $ this. In het bovenstaande voorbeeld is $ bar een gewone variabele en daarom wordt er naar verwezen als $ obj-> bar (in de objectcontext met variabele obj) of als $ this-> bar (opnieuw in een objectcontext binnen een methode van een object).
zelf gebruikt geen voorgaande $ omdat zelf heeft geen betrekking op een variabele, maar op de klasseconstructie zelf. $ this verwijst naar een specifieke variabele zodat deze een voorgaande heeft $.