OOP Static

  • Hey mensen,


    ik heb even een vraag over de 'static' functie van OOP programmatie in PHP.


    Ik snap de bedoeling er gedeeltelijk nu van. Wanneer je een variable static mee geeft:


    PHP
    public static $pTo = 0.45359237;


    wordt hij onthouden en als je hem dan ergens anders verandert in de class en je maakt daarna een andere variable aan die de zelfde klass gebruikt:


    PHP
    $a = new a();
    $b = new a();


    blijft de veranderde variable het zelfde (is dat $pTo bijv. de eerste x bij het aanmaken verandert in 0.5 wordt bij het aanmaken van $b niet weer terug gezet naar 0.45359237)


    Maar dan mijn vraag want is het nut van static te gebruiken met een method dat heb ik nog niet kunnen vinden en ook niet uit het boek waar ik van uit het leren ben (PHP Objects Oriented Solutions)

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Wil je misschien je code even tonen?


    En een goed voorbeeld is:

    PHP
    function test()
    {
        static $n = 1;
        echo $n .'<br />';
        $n++;
    }


    Wanneer jij nu het volgende doet:

    PHP
    test();
    test();
    test();


    Wat dit nu doet is hij onthoud het opgegeven getal dus hij begint op 1 en daarna 2 en daarna 3 ;)
    Snap je ongeveer de bedoeling.

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.


    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML


    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • ah zo ja ik snap hem nu thx :)
    en ik heb geen code ik ben via het boek de basis begrippen aan het uitzoeken aangezien ik al wel eerder met OOP heb gewerkt maar nooit de basis begrippen heb uitgeprobeerd heb gelezen en heb begrepen ;)


    daarnaast nog even de vraag over __autoload functie ik snap deze functie wel maar ik vraag me af of hij wel van nut is als je maar 2 classes of iets meer gebruikt.


    Lijkt me juist handiger als je stuk of 40 classes hebt en als je die door middel van een loop wilt includen, hoe sstaan jullie daar tegen over?

  • Voor maar een paar classes is __autoload() overkill (met [func]spl_autoload_register[/func] kun je er meerdere registreren, zo kunnen er dus Kohana, Zend en Swift Mailer autoloaders tegelijk bestaan)


    Een statische class variable is erg handig voor het Singleton pattern.
    Je wilt dan maar één instantie van een bepaald object hebben.
    Oplossing:


    Maar als je bijvoorbeeld wilt dat een method maar een keer wordt uitgevoerd dan is er geen enkele reden om dat in een statische class variable op te slaan, tenzij andere methods dit moeten weten.
    Een statische variable binnen de method zelf is dan voldoende.
    Het zijn twee verschillende beesten. (Heb ik nu een engelse uitspraak vertaald, of ...?)

  • Nee...



    Zo voorkom je dat...


    Het leuke van classes gebruiken is dat je meerdere instanties van die class kunt hebben.
    Als je dan een (niet statische) eigenschap in de ene instantie veranderd heeft dat geen enkel effect op de andere instantie.
    Maar soms wil je dat als je een eigenschap veranderd het juist wel effect heeft op alle andere instanties!
    Daar zijn statische variablen heel goed voor! (er zijn natuurlijk ook minder mooie manier te verzinnen)

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!