Constructor: return value?
Via onderstaande (versimpelde) klasse wilde ik een waarde retourneren via de constructor. Dat blijkt echter niet te kunnen, en dat is op zich best logisch geloof ik (je kan immers geen object printen). Wat is de beste workaround hiervoor? Een property $versnelling opnemen en die in de constructor setten, en vervolgens met een method getVersnelling() of iets dergelijks ophalen? of direct een setVersnelling(), en de constructor achterwege laten?
Gesponsorde koppelingen:
Als je hiervoor een hele class moet maken, doe het dan helemaal goed :P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Versnelling {
private $i_Versnelling;
public function __construct($eindsnelheid, $tijdsduur)
{
/*
* eindsnelheid in m/s, tijdsduur in s
*/
$this->i_Versnelling = ($eindsnelheid/tijdsduur);
}
public function getVersnelling()
{
return $this->i_Versnelling;
}
}
$test = new Versnelling(100, 5);
print 'Gemiddelde versnelling in m/s2: ' . $test->getVersnelling();
?>
class Versnelling {
private $i_Versnelling;
public function __construct($eindsnelheid, $tijdsduur)
{
/*
* eindsnelheid in m/s, tijdsduur in s
*/
$this->i_Versnelling = ($eindsnelheid/tijdsduur);
}
public function getVersnelling()
{
return $this->i_Versnelling;
}
}
$test = new Versnelling(100, 5);
print 'Gemiddelde versnelling in m/s2: ' . $test->getVersnelling();
?>
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
$i_Versnelling = ($eindsnelheid/tijdsduur); moet zijn:
$this->i_Versnelling = ($eindsnelheid/tijdsduur); :P
Maar dat vroeg ik me dus af, of het dan in een setVersnelling() moest, en waarom je niet direct een waarde kan retourneren vanuit de constructor?
Edit:
En natuurlijk moet return $i_Versnelling; in jouw voorbeeld ook zijn:
return $this->i_Versnelling;
$this->i_Versnelling = ($eindsnelheid/tijdsduur); :P
Maar dat vroeg ik me dus af, of het dan in een setVersnelling() moest, en waarom je niet direct een waarde kan retourneren vanuit de constructor?
Edit:
En natuurlijk moet return $i_Versnelling; in jouw voorbeeld ook zijn:
return $this->i_Versnelling;
Gewijzigd op 01/01/1970 01:00:00 door Kasper Isgek
Thnx voor de fix.
Aan de omschrijving van __construct kun je eigenlijk al afleiden waarom return niet zal werken in __construct:
Oftewel, __construct is ervoor om iets te definiƫren en niet om iets op te halen.
En ik zou dan gewoon de kracht van __construct gebruiken in plaats van setVersnelling().
Aan de omschrijving van __construct kun je eigenlijk al afleiden waarom return niet zal werken in __construct:
Quote:
PHP 5 allows developers to declare constructor methods for classes. Classes which have a constructor method call this method on each newly-created object, so it is suitable for any initialization that the object may need before it is used.
Oftewel, __construct is ervoor om iets te definiƫren en niet om iets op te halen.
En ik zou dan gewoon de kracht van __construct gebruiken in plaats van setVersnelling().
Wat je wel kan doen is __toString() gebruiken. Hierdoor kan je $test gewoon in een echo zetten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
class Versnelling {
private $i_Versnelling;
public function __construct($eindsnelheid, $tijdsduur)
{
/*
* eindsnelheid in m/s, tijdsduur in s
*/
$this->i_Versnelling = ($eindsnelheid/tijdsduur);
}
public function getVersnelling()
{
return $this->i_Versnelling;
}
public function __toString()
{
return $this->getVersnelling();
}
}
$test = new Versnelling(100, 5);
print 'Gemiddelde versnelling in m/s2: ' . $test;
?>
class Versnelling {
private $i_Versnelling;
public function __construct($eindsnelheid, $tijdsduur)
{
/*
* eindsnelheid in m/s, tijdsduur in s
*/
$this->i_Versnelling = ($eindsnelheid/tijdsduur);
}
public function getVersnelling()
{
return $this->i_Versnelling;
}
public function __toString()
{
return $this->getVersnelling();
}
}
$test = new Versnelling(100, 5);
print 'Gemiddelde versnelling in m/s2: ' . $test;
?>
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP



