login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[OOP] T_NEW error

Offline Stijn - 03/08/2006 15:54
Avatar van StijnPHP expert hallo

Ik was bezig met een class tot ik plots het ingenieus idee kreeg van dit te proberen:
  1. <?php
  2.  
  3. class Test
  4. {
  5.  
  6. public function shout()
  7. {
  8. return 'dit is de '.__CLASS__.' class';
  9. }
  10.  
  11. }
  12.  
  13. class Stijn
  14. {
  15.  
  16. public $vari = new Test();
  17.  
  18. public function shout2()
  19. {
  20. return $this->vari->shout() . ' en dit is de '.__CLASS__.' class';
  21. }
  22.  
  23. }
  24.  
  25. $obj = new Stijn();
  26. echo $obj->shout2();
  27. ?>

Normaal zou dit moeten werken want je kan een nieuw object beginnen in een variable (zie $obj = new Stijn(); ) maar ik krijg de error:
Citaat:
Parse error: syntax error, unexpected T_NEW in /var/www/boe.php on line 16

In theorie zou dit moeten kloppen (alvast in mijn theorie). Weet iemand soms waarom dit niet werkt? want je kan wel dit doen in een class:
  1. <?php
  2.  
  3. class Test
  4. {
  5.  
  6. public function shout()
  7. {
  8. return 'dit is de '.__CLASS__.' class';
  9. }
  10.  
  11. }
  12.  
  13. class Stijn
  14. {
  15.  
  16. public function shout2()
  17. {
  18. $var = new Test();
  19. return $var->shout() . ' en dit is de '.__CLASS__.' class';
  20. }
  21.  
  22. }
  23.  
  24. $obj = new Stijn();
  25. echo $obj->shout2();
  26. ?>


groeten, stijn

3 antwoorden

Gesponsorde links
Offline nemesiskoen - 03/08/2006 16:00
Avatar van nemesiskoen Gouden medaille

PHP expert
Om dezelfde reden dat je geen variabele als optionele parameter kan meegeven werkt dit ook niet. De waarde die je geeft aan een klasse variabele is ook een optionele waarde (omdat deze geset kan worden). Voor zo'n zaken dient de constructor.

  1. <?php
  2. class X {
  3. protected $_var;
  4. public function __construct() {
  5. $this->_var = new Y();
  6. }
  7. // ...
  8. }
Offline Stijn - 03/08/2006 16:03
Avatar van Stijn PHP expert dus klopt mijn theorie wel deels?
  1. <?php
  2. class X {
  3. protected $_var;
  4. public function __construct() {
  5. $this->_var = new Y();
  6. }
  7.  
  8.  
  9. public function shout() {
  10. return $this->_var->functionOfYclass();
  11. }
  12.  
  13. }
  14.  
  15. $obj = new X();
  16. echo $obj->shout();
  17. ?>


stijn
Offline nemesiskoen - 03/08/2006 17:03
Avatar van nemesiskoen Gouden medaille

PHP expert
Welke theorie?
Dat je een object binnen een klasse als object kan benaderen?
In theorie kan je zoveel '->'-en maken als je wilt:
(van recursiviteit gesproken)
  1. <?php
  2. class Recurse {
  3. public $child;
  4. public function initChild() {
  5. $this->child = new self;
  6. return $this->child;
  7. }
  8.  
  9. public function startRecurse() {
  10. $this->initChild()->initChild()->initChild()->initChild(); // ...
  11. }
  12.  
  13. public function hello() {
  14. echo "halo";
  15. }
  16. }
  17.  
  18. $r = new Recurse;
  19. $r->startRecurse();
  20. $r->child->child->child->hello(); // ...


Maar dat is een beetje onzin programmeren imo.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.2s