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;
?>
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;
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;
?> 

Reageren