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?
<?php
class Versnelling {
public function __construct($eindsnelheid, $tijdsduur) {
/*
* eindsnelheid in m/s, tijdsduur in s
*/
return $eindsnelheid/tijdsduur;
}
}
$test = new Versnelling(100, 5);
print 'Gemiddelde versnelling in m/s2: ' . $test;
?>
?Onbekende gebruiker
25-04-2009 22:30
Als je hiervoor een hele class moet maken, doe het dan helemaal goed :P
<?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();
?>
$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;
?Onbekende gebruiker
25-04-2009 22:38
Thnx voor de fix.
Aan de omschrijving van __construct kun je eigenlijk al afleiden waarom return niet zal werken in __construct:
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.
<?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;
?>