Variabelen aan constructor

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter J

Wouter J

06/12/2010 16:47:20
Quote Anchor link
Ik heb wat tutorials gevolgd over het maken van Clases. Hier heb ik wat mee geoefend en loop nu tegen een probleem aan:

Het probleem
Bij functions kun je variabelen meegeven, bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function iets($var) {
 return $var;
}

echo iets('Hello World');
?>

Maar nu wil ik zo'n variabele aan de constructor meegeven. Hoe kun je zoiets dan aanroepen in de php?(zoals in dit voorbeeld bij hello world)

Bedachte oplossingen
Ik had 2 oplossingen bedacht:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class ClassNaam($var) {

  function
__construct() {
    return $var;
  }
}


$ClassNaam = new ClassNaam('Hello World');

echo $ClassNaam;
?>

Dit werkt helaas niet. Nu dacht ik, ik roep de variabele eerst bij de class op en dan laad ik hem als public:
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 ClassNaam($var) {

  public $var = $var;

  function
__construct() {
    return $this->var;
  }
}


$ClassNaam = new ClassNaam;
echo $ClassNaam;
?>

Helaas werkt dit ook niet.

De vraag
Is er hier een oplossing voor? Of kan dit gewoon niet?
 
PHP hulp

PHP hulp

26/11/2024 17:44:53
 
Ozzie PHP

Ozzie PHP

06/12/2010 16:51:47
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class ClassNaam {

  public $var;

  public function __construct($var) {
    $this->var = $var;
  }


  public function getVar() {
    return $this->var;
  }

}


$ClassNaam = new ClassNaam('hallo');
echo $ClassNaam->getVar();
?>
Gewijzigd op 06/12/2010 16:52:23 door Ozzie PHP
 
Kris Peeters

Kris Peeters

07/12/2010 10:20:01
Quote Anchor link
Een constructor is gemaakt om een object aan te maken, niet om een variabele terug te geven.

Niet doen dus.

Met gelijk welke andere functie (jaja, er zijn wel nog uitzonderingen) mag je dat wel doen.
 
Chris -

Chris -

07/12/2010 10:41:14
Quote Anchor link
Je denkt dat een Class aanmaken een functie is, dat is niet zo (zie jouw eerste regel, jij opent class met een variabele daar gelijk in). Het is een geheel die onder andere functies samenvat. Zoals Ozzie het heeft neergezet klopt het.

Kris, ondanks dat het niet altijd netjes is, kun je best de constructor gebruiken om gelijk iets terug te krijgen. Ik ben het met je eens dat het netter is om daar een aparte functie voor te gebruiken, maar dat betekend niet dat het niet kan ;-)
 
Jelmer -

Jelmer -

07/12/2010 10:49:13
Quote Anchor link
Chris Horeweg op 07/12/2010 10:41:14:
Kris, ondanks dat het niet altijd netjes is, kun je best de constructor gebruiken om gelijk iets terug te krijgen. Ik ben het met je eens dat het netter is om daar een aparte functie voor te gebruiken, maar dat betekend niet dat het niet kan ;-)

Probeer maar eens, maar je return-statement in de constructor wordt gewoon genegeerd. Als je new Ding gebruikt, krijg je altijd een instantie van Ding, wat er ook in de constructor staat. (tenzij je natuurlijk een exception gooit of die() aanroept ofzo)
 
Kris Peeters

Kris Peeters

07/12/2010 10:50:33
Quote Anchor link
Ah bon, kan je een voorbeeld geven?

In de meeste talen die ik ken, mag je bij een constructor geen return geven.

Ik heb er nooit aan gedacht om in een php constructor een return terug te geven. Ik zou niet weten waarom en hoe te gebruiken.
 
Chris -

Chris -

07/12/2010 10:57:05
Quote Anchor link
@Jelmer: Je hebt inderdaad gelijk!
Quote:
Catchable fatal error: Object of class Test could not be converted to string in C:\wamp\www\overig\test.class.php on line 10

@Kris: Simpel testje:
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 Test {
    public function __construct($text)
    {

        return $text;
    }
}


$test = new Test('test');
echo $test;

echo '<br /><hr />';
echo highlight_file(__FILE__);?>


Edit:
Ik doe het zelf nooit zo, vandaar dat ik me er niet eens van was bewust dat dit niet kon..
Gewijzigd op 07/12/2010 10:59:45 door Chris -
 
Kris Peeters

Kris Peeters

07/12/2010 13:12:11
Quote Anchor link
Oh, cool die
highlight_file(__FILE__);
Kende ik niet.
 



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.