[OO] Verschil tussen :: en ->

  • Je gebruikt dubbele punten wanneer je een methode van een klasse statisch aan wilt roepen. Dat is heel handig wanneer je werkt met objecten die over het gehele systeem gebruikt worden. Om het om te zetten van geïnstantieerde methoden naar statische, kun je de singleton-oplossing gebruiken. Daar weet Wikipedia meer over, gaat een lang verhaal worden als ik dat hierin moet proppen.


    Het is nu al duidelijk dat je het 'pijltje' gebruikt wanneer je een instantie van het object hebt. Dat is handig wanneer je objecten hebt waar je duidelijk en gestructureerd in wilt werken. Verwar statische objecten niet met geïnstantieerde! Het kan heel irritant zijn wanneer je als programmeur telkens instanties aan moet maken of als global moet aanroepen.


    $var::output gaat trouwens niet werken, aangezien 'output' hier geen methode, noch statische variabele is.


    Succes!

    Totdat Stefan en Koen terug zijn van vakantie ben ik weer actief. Daarna ben ik weer weg ;)

  • -> gebruik je in object context...
    dat houd in dan je een object hebt gecreeerd door middel van het new keyword.


    bijvoorbeeld:

    PHP
    $voorbeeld = new Voorbeeld;
    echo $voorbeeld->output;


    $voorbeeld bevat dus het object.
    Binnen de methods in de class is het wel handig als je toegang hebt tot dat object, daar is de magische variable $this voor.
    Met $this kan je zelfs meer dan met $voorbeeld buiten methods...
    $this betekend dat je binnen de class zit, en dan heb je toegang tot protected en private methods en variabelen.


    :: gebruik je in statische context
    Je kan zo dingen doen zonder eerst een object aan te maken, bijvoorbeeld om een statische protected variabele aan te passen.
    Omdat het statisch is is die voor elke instantie van die class het zelfde.
    De niet-statische methodes hebben gewoon toegang tot alle variabelen en eigenschappen van die class (ok, ik laat private deels achterwegen nu), dus die kunnen die in vergelijkingen gebruiken, of bijvoorbeeld de bestanden van het juiste theme kiezen...


    voorbeeld:

  • Hierbij even een eigen class gemaakt na heeeeeeel wat uitleg van darsstar begin ik het lichtelijk te snappen:


  • Dus dan moet dit er nog boven:


    PHP
    static public $TestStaticVar;
    static public $testStaticVar2;


    En waarom ik dit maak zodat mensen zoals jij makkelijk kunnen zien of het goed is of niet ;)


    en dan nog 1 ding, constante TestStatic bedoel je wat ook alweer precies mee [a]

  • Zo weer even een testclass aangemaakt tips / probs etc:


  • Het idee van de syntaxis klopt (voor zover ik het snel over gekeken heb).
    Ik denk dat je not wat moet oefenen op het objectgeoriënteerd denken.
    ReturnResults() is niet echt nodig, aangezien er niet zo veel bewerkingen nodig zijn om het resultaat te krijgen en je class variabelen public zijn. Als ze private zijn, heb je wel getters en setters nodig. Daar is ongetwijfeld wel iets over te vinden op Google.


    Denk er dus aan dat je klassen logisch, objectgeoriënteerd, dynamisch en gebruiksvriendelijk in elkaar vallen.

    Totdat Stefan en Koen terug zijn van vakantie ben ik weer actief. Daarna ben ik weer weg ;)

  • Getters gebruiken voor publieke variabelen is niet echt de beste manier om dat te doen ;)
    Denk dat je toch maar even onze instructies moet opvolgen. De eerste stappen zijn even moeilijk, maar als je daar doorheen bent gaat het al iets gemakkelijker.

    Totdat Stefan en Koen terug zijn van vakantie ben ik weer actief. Daarna ben ik weer weg ;)


  • weer een nieuwe nu met een __GET en __SET maar denk dat het hard faald! :o

  • Redelijk ja...


    __set() en __get() hebben geen zin als je alleen public variabelen hebt en niets doet voor variabelen die niet bestaan...
    Ik vraag me ook af of je __get() en __set() wel door hebt...
    __get() heeft namelijk één argument nodig, nu heeft het er geen...


    Jouw set is dus een beetje vreemd...
    Geef de parameters van __set(), __get() etc alleen defaults als je daar een erg goede reden voor hebt...
    TestClass::SetDyn() en TestClass::SetStatic() hebben ook geen defaults nodig, je doet er niets mee...
    Als je die methods zonder argumenten aanroept ben je ze eigenlijk aan het unsetten...
    De return in TestClass::SetStatic() slaat ook nergens op...

  • Ik dacht het beste leer je door gewoon dingen te maken waar je wat later aan hebt dus zo ben ik begonnen met een "register" class:


    Comments so far:



    $db-> bestaat nog niet (wordt database class die ik hierna ga brouwen)

  • protected $db;
    Register heeft geen parent (is niet extended, zoek maar even op Google naar 'php extends' of zoiets), dus je kunt beter private gebruiken.
    Voor hetgeen wat jij probeert met je database variabele, heeft men dus statische klassen/Singleton uitgevonden. Je zou je database dan op deze manier kunnen benaderen:

    PHP
    DB::select('id')
    ->from('users')
    ->where('id', '=', '1')
    ->execute();


    (Gebaseerd op Kohana, dus jouw manier zal waarschijnlijk iets anders zijn)


    if ( strlen ( $value ) > $PasswordMaxLength OR strlen ( $value ) < $PasswordMinLength )
    Dit geeft een error. Gebruik hier self::$PasswordMinLength. Het is trouwens niet nodig in een niet-statische methode een statische variabele te gebruiken, tenzij je van plan bent hem ooit nog zonder instantie aan te roepen.


    Verder zitten er nog wat andere foutjes in, maar daar kom je wel uit als je de bovenstaande dingen verbeterd hebt.
    Dit is trouwens geen OO. Ik weet niet hoe belangrijk het is om dat in het begin te snappen, aangezien ik het ook later pas door kreeg.
    Afijn, kijk maar eens goed naar je code. Je denkt in procedures, niet in objecten ;)

    Totdat Stefan en Koen terug zijn van vakantie ben ik weer actief. Daarna ben ik weer weg ;)

  • Object is bijv:


    je hebt een class hond, en je daar doe je eigenschappen van een hond inzetten like: 4 poten etc.


    Daaronder kan je een object lassie maken die dan weer speciale kenmerken van die hond heeft alleen ik weet niet goed hoe ik dan zoiets kan neer zetten in een echte class {} vorm

  • Je registratie klasse is een object. Ik bedoel dat je 'dingen' met bepaalde eigenschappen gescheiden houdt. Het controleren van iets kun je bijvoorbeeld beter in een andere klasse zetten die het controleren regelt. Zo kun je dingen hergebruiken, bijvoorbeeld als je je gebruikersnaam of wachtwoord wilt veranderen.

    Totdat Stefan en Koen terug zijn van vakantie ben ik weer actief. Daarna ben ik weer weg ;)

Participate now!

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