själv vs. detta i PHP

PHP stöder klasser och andra objektorienterade konstruktioner. Statiska funktioner och variabler i PHP-klasser är inte associerade med någon specifik förekomst av klassen (med andra ord ett objekt). Se skillnaden mellan objekt och klass.

Istället är statiska funktioner och variabler associerade med klassdefinitionen själv. Med andra ord delar alla instanser av en klass samma statiska variabel. Inom ramen för en metod (funktion) i en klass, fås statiska variabler och funktioner med själv::. Andra metoder och variabler används i samband med ett objekt (en instans) i en klass, med användning av this->.

Jämförelsediagram

själv kontra jämförelse diagrammet
självdetta
Kan användas i statiska funktioner Ja Nej
tillgänglig klassvariabel och metoder med själv:: $ this-> (Observera att PHP> 5.3 tillåter användning av $ detta med statiska variabler använder $ this :: $ foo. $ this-> foo kommer fortfarande att vara odefinierad om $ foo är en statisk var.)
Behöver ett instantierat objekt Nej Ja

själv vs detta i PHP - Exempel

klassexempelClass public static $ foo; offentlig $ bar; allmän funktion regularFunction () echo $ this-> bar;  statisk statisk funktion staticFunction () echo self :: $ foo;  statisk statisk funktion anotherStatFn () self :: staticFunction ();  allmän funktion regularFnUsingStaticVar () echo self :: $ foo;  // Obs! Som av PHP 5.3 använder $ this :: $ bar istället för själv :: $ bar är tillåten exampleClass :: $ foo = "Hello"; $ obj = nytt exempelClass (); $ obj-> bar = "World!"; Example :: staticFunction (); / * utskrifter Hej * / $ obj-> regularFunction (); / * utskrifter världen! * / 

Statiska funktioner kan bara använda statiska variabler. Statiska funktioner och variabler refereras via själv::funktionsnamn () eller själv::variabelnamn. I exemplet som visas ovan refereras statiska variabler med klassnamnet (exempelClass :: $ foo) eller, med a själv:: (själv :: $ foo) när den används inom statisk metod [namngivna staticFunction ()] av klassen.

Regelbundna funktioner och variabler i en klass behöver ett objektkontext som ska refereras. De kan inte existera utan en objektkontext. Objektets sammanhang tillhandahålls av $ detta. I det ovanstående exemplet är $ bar en vanlig variabel och så refereras den till som $ obj-> bar (i objektets sammanhang med variabel obj) eller som $ this-> bar (igen i ett objekt-kontext inom en metod för ett objekt).

själv använder inte en föregående $ därför att själv Anger inte en variabel men klassen konstruerar sig själv. $ detta refererar en specifik variabel så att den har en föregående $.

referenser

  • Statiskt nyckelord - PHP.net