login  Naam:   Wachtwoord: 
Registreer je!
 Forum

OOP Programming - Basis

Offline Cywood - 11/06/2014 17:58 (laatste wijziging 11/06/2014 18:00)
Avatar van CywoodLid Hallo,

Ik heb een (ik denk) simpele vraag voor jullie, ik werk met veel functions op een pagina, nu heb ik een aparte test.php aangemaakt om het volgende even te testen, zodra ik de functie weg laat werkt het wel, maar ik zou het graag in de functie werkend willen hebben, zoals onderstaande:

  1. <?php
  2.  
  3. public class UserN {
  4. public $username;
  5. public $rangerpoints;
  6. }
  7.  
  8.  
  9.  
  10. function SetUser() {
  11. $cyw00d = new UserN();
  12. $cyw00d->username = "Cyw00d";
  13. }
  14.  
  15. SetUser();
  16.  
  17. echo $cyw00d->username;
  18.  
  19. ?>


Het lijkt net alsof hij in de "function SetUser()" niet de data toevoegd in de class, wat ik wel graag op deze manier zou willen.

2 antwoorden

Gesponsorde links
Offline Thomas - 11/06/2014 20:10 (laatste wijziging 11/06/2014 20:11)
Avatar van Thomas Moderator Dit heeft te maken met "scopes", dat wil zeggen, de "gebieden in je code" waar variabelen geldig zijn ("bestaan").

Het object $cyw00d van de klasse UserN() bestaat alleen binnen de scope van de functie SetUser(), daar buiten (in dit geval in de "globale scope") bestaat $cyw00d niet.

Persoonlijk zou ik je klasse iets anders opzetten, en de klasse-variabelen $username en $rangerpoints protected maken. Dat wil zeggen dat deze niet rechtstreeks (via het object) benaderbaar / aanpasbaar zijn. Dit mede omdat je eigenlijk al een functie hebt voor het instellen van een gebruikersnaam. Dit is nu een functie, maar zou dus eigenlijk een (publieke) methode van de klasse moeten worden (nota bene klasses zijn niet public of wat dan ook):

  1. <?php
  2. class UserN
  3. {
  4. protected $userName;
  5. protected $rangerPoints;
  6.  
  7. public function setUserName($name) {
  8. $this->userName = $name;
  9. }
  10.  
  11. // en vervolgens heb je ook een (publieke) methode nodig om de naam weer uit te lezen
  12. public function getUserName() {
  13. return $this->userName;
  14. }
  15. }
  16.  
  17. $cyw00d = new UserN();
  18. $cyw00d->setUserName('Cyw00d');
  19. echo $cyw00d->getUserName();
  20. ?>


En als alle objecten van de klasse UserN een gebruikersnaam hebben, zou je deze ook in de constructor kunnen instellen. Ik zou zeggen, kijk onze tutorials over OOP eens door.
Offline Wijnand - 12/06/2014 09:07
Avatar van Wijnand Moderator Zoals deze: http://www.site...ramming%29
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.182s