Verschil tussen static en normale classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Raoul -

- Raoul -

27/02/2012 00:08:35
Quote Anchor link
Hoi

Wat is het verschil tussen static en normale classes?
Ik weet al dat je static classes gewoon kunt aanroepen met :: maar wat is daar het nut van? Ik weet wel dat het gemakkelijk kan zijn als je met een database class werkt en als je niet iedere x een nieuwe connectie wilt openen.

Maar zou het een goed idee zijn om een static class te gebruiken voor een template class zodat ik bv template::header() en template::footer() zou doen of zou het beter zijn als ik gewoon $template->xx doe?

Groetjes
 
PHP hulp

PHP hulp

27/11/2024 20:19:44
 
Kris Peeters

Kris Peeters

27/02/2012 09:35:20
Quote Anchor link
Static betekent dat de $this-> variabelen (de eigenschappen) niet mogen gebruikt worden.

Dan blijft dus juist de functie over.

van daar ook ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$mijn_object
->mijn_functie() // hier heb je binnen de functie mijn_functie de $this-> variabelen ter beschikking

// tegenover


Mijn_class::mijn_static_functie() // Je spreekt hier de functie aan via de class naam, niet voa het object.  Je hebt dan ook geen ingevulde waarden aangezien er geen object is dat je aanspreekt
?>
Gewijzigd op 27/02/2012 09:35:47 door Kris Peeters
 
Wouter J

Wouter J

27/02/2012 10:08:40
Quote Anchor link
Het voordeel van static methods is dat je niet per se een instance van de class moet aanmaken. Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class User
{
  public static function getById( $id )
  {

    // haal user data op
    return new User($userData);
  }
}


// Nu kunnen we makkelijk dit gebruiken:
$kris = User::getById(21);
?>


Het grootste voordeel is dat je geen instance hoeft aan te maken. Hierdoor kun je lazy loading (wat ik in het voorbeeld hierboven doe) gebruiken en andere handige dingen.

Voor je template klasse kun je beter gewone method gebruiken. Want deze methods zijn echt eigenschappen van de klasse (al zou ik wel getHeader gebruiken i.p.v. header()). Static methods/variabele zijn eigenlijk geen eigenschappen van een klasse. Ze horen wel bij de klasse, maar hebben geen toegang tot de eigenschappen.
 
Ozzie PHP

Ozzie PHP

27/02/2012 10:24:03
Quote Anchor link
Wouter J op 27/02/2012 10:08:40:
Het voordeel van static methods is dat je niet per se een instance van de class moet aanmaken.

Maar onderwater gebeurt dit natuurlijk wel (in jouw voorbeeldje).

Is dit dan niet logischer:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$kris
= new User(21); // waarbij 21 het id is
?>


Volgens mij gebruik je statische classes met name indien je niet meerdere objecten van iets wil aanmaken.
Gewijzigd op 27/02/2012 10:24:28 door Ozzie PHP
 
Wouter J

Wouter J

27/02/2012 10:50:26
Quote Anchor link
Quote:
Maar onderwater gebeurt dit natuurlijk wel (in jouw voorbeeldje).

Het gebeurd pas in de method zelf. Voor het aanroepen van wat voor static iets dan ook moet nooit een instance gemaakt worden.

En wat logischer is weet ik niet. Ik vind zelf dat van mij, omdat een user in de constructor geen id moet meekrijgen, maar een naam en al die andere nodige data. De UserMapper zal in dit geval moeten zorgen dat er een User moet worden aangemaakt. Ik had mijn voorbeeld een beetje te simpel gemaakt, want eigenlijk zou dat een UserMapper klasse moeten zijn die een User aanmaakt. Zoiets heet het factory pattern.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.