Versio

Constructor: return value?

Overzicht Reageren

Kasper Isgek

Kasper Isgek

25/04/2009 22:23:00
Quote Anchor link
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?

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

PHP hulp

24/05/2012 06:38:46
Gesponsorde koppelingen:
 
GaMer B

GaMer B

25/04/2009 22:30:00
Quote Anchor link
Als je hiervoor een hele class moet maken, doe het dan helemaal goed :P

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
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();
?>
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
 
Kasper Isgek

Kasper Isgek

25/04/2009 22:34:00
Quote Anchor link
$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;
Gewijzigd op 01/01/1970 01:00:00 door Kasper Isgek
 
GaMer B

GaMer B

25/04/2009 22:38:00
Quote Anchor link
Thnx voor de fix.

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().
 
Mark PHP

Mark PHP

26/04/2009 00:22:00
Quote Anchor link
Wat je wel kan doen is __toString() gebruiken. Hierdoor kan je $test gewoon in een echo zetten.
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
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;
?>
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
 



Overzicht Reageren

Get Adobe Flash player