sine vs. acest lucru în PHP

PHP suportă clase și alte construcții orientate pe obiecte. Funcțiile statice și variabilele din clasele PHP nu sunt asociate cu nici o instanță specifică a clasei (cu alte cuvinte, un obiect). Vedeți diferența între obiect și clasă.

În schimb, funcțiile statice și variabilele sunt asociate cu definiția clasei în sine. Cu alte cuvinte, toate instanțele unei clase partajează aceeași variabilă statică. În contextul unei metode (funcție) a unei clase, variabilele și funcțiile statice sunt accesate folosind de sine::. Alte metode și variabile sunt utilizate în contextul unui obiect (o instanță) dintr-o clasă, folosind this->.

Diagramă de comparație

față de această diagramă de comparație
de sineacest
Poate fi utilizat în funcții statice da Nu
clasă variabilă accesibilă și metode cu de sine:: $ this-> (Rețineți că PHP> 5.3 permite folosirea $ this cu variabile statice folosind $ this :: $ foo. $ this-> foo va fi încă nedefinit dacă $ foo este un static var.)
Are nevoie de un obiect instanțiat Nu da

eu însumi în PHP - Exemple

clasa exampleClass public static $ foo; bar public $; funcția publică regularFunction () echo $ this-> bar;  funcția statică publică staticFunction () echo self :: $ foo;  funcția statică publică anotherStatFn () self :: staticFunction ();  funcția publică regularFnUsingStaticVar () echo self :: $ foo;  // NOTĂ: Din PHP 5.3 folosind $ this :: $ bar în loc de auto :: $ bar este permis exampleClass :: $ foo = "Hello"; $ obj = exemplul nouClass (); $ obj-> bar = "Lumea!"; exampleClass :: staticFunction (); / * imprimă Hello * / $ obj-> regularFunction (); / * imprimă Lumea! * / 

Funcțiile statice pot utiliza numai variabile statice. Funcțiile și variabilele statice sunt menționate prin de sine::functionName () sau de sine::nume_variabila. În exemplul prezentat mai sus, variabilele statice sunt menționate cu numele clasei (exampleClass :: $ foo) sau, cu de sine:: (self :: $ foo) când este utilizat în cadrul metodei statice [numit staticFunction ()] din clasă.

Funcțiile și variabilele regulate ale unei clase necesită un context de obiect care trebuie să fie referit. Ele nu pot exista fără un context de obiect. Contextul obiect este furnizat de $ this. În exemplul de mai sus, $ bar este o variabilă obișnuită și deci este referită ca $ obj-> bar (în contextul obiectului cu variabila obj) sau ca $ this-> bar (din nou într-un context de obiect în cadrul unei metode a unui obiect).

de sine nu utilizează un precedent $ deoarece de sine nu înseamnă o variabilă, ci construcția de clasă însăși. $ this se referă la o variabilă specifică, deci are precedent $.

Referințe

  • Cuvânt cheie static - PHP.net