login  Naam:   Wachtwoord: 
Registreer je!
 Forum

__contructor

Offline leendert - 28/08/2005 14:05
Avatar van leendertHTML beginner Ik ben bezig met OOP maar ik kan niet echt goed ontdekken waar een contructor voor dient en wat het precies is en waar het handig voor is.
Wie kan met dat uitleggen?

6 antwoorden

Gesponsorde links
Offline nemesiskoen - 28/08/2005 15:27 (laatste wijziging 28/08/2005 15:27)
Avatar van nemesiskoen Gouden medaille

PHP expert
Stel ik heb een class die bv. alleen maar 1 ding kan terugsturen.
Stel ik wil een rekenmachine maken (die alleen maar optelt) via een class.
Wat heb ik dan nodig:
1) een invoermethode
2) een rekenmethode
3) een terugstuurmethode

Voor dit aan te roepen heb je volgende lijnen nodig:
  1. <?php
  2. $rekenmachine = new rekenmachine;
  3. $rekenmachine->invoer(4,5);
  4. $rekenmachine->reken();
  5. echo $rekenmachine->uitvoer();
  6. ?>

Als je class er zo uit ziet:
  1. <?php
  2. class rekenmachine{
  3. private $get1;
  4. private $get2;
  5. private $res;
  6. function invoer($getal1,$getal2) {
  7. $this->get1 = $getal1;
  8. $this->get2 = $getal2;
  9. }
  10. function reken() {
  11. if(is_numeric($this->get1)&&is_numeric($this->get2)){
  12. $this->res = $this->get1 + $this->get2;
  13. }
  14. }
  15. function uitvoer() {
  16. return $this->res;
  17. }
  18. }
  19. ?>


Dit is natuurlijk heel omslachtig voorgesteld, maar om even een duidelijk beeld te scheppen.

Nu kan je dit korter schrijven door een constructor te gebruiken (je kan ook door andere manieren maar dat is dan slordig oid) zodat je het zo aanroept:
  1. <?php
  2. $rekenmachine = new rekenmachine(4,5);
  3. $rekenmachine->reken();
  4. echo $rekenmachine->uitvoer();
  5. ?>

En dan ziet je class er zo uit:
  1. <?php
  2. class rekenmachine{
  3. private $get1;
  4. private $get2;
  5. //php5:
  6. function __construct($getal1,$getal2) {
  7. $this->get1 = $getal1;
  8. $this->get2 = $getal2;
  9. }
  10. //php4:
  11. function rekenmachine($getal1,$getal2) {
  12. $this->get1 = $getal1;
  13. $this->get2 = $getal2;
  14. }
  15. function reken() {
  16. if(is_numeric($this->get1)&&is_numeric($this->get2)){
  17. $this->res = $this->get1 + $this->get2;
  18. }
  19. }
  20. function uitvoer() {
  21. return $this->res;
  22. }
  23. }
  24. ?>
Offline XenoX - 28/08/2005 15:29 (laatste wijziging 28/08/2005 15:43)
Avatar van XenoX Gouden medailleGouden medaille

PHP expert
Dat is de functie die hij uitvoert als je een object aanmaakt.

Als dit __constructor is:
  1. function __constructor($par1, $par2)
  2. {
  3. echo $par1 + $par2;
  4. }


Dan maak je zo het object aan:
  1. $obj = new class(1, 2);


Dan krijg je 3 op je scherm.

Let erbij wel op dat __constructor pas vanaf php5 is. Bij de eerdere php versies maak je gewoon een functie die hetzelfde heet als de class.
Offline Fenrir - 28/08/2005 18:30 (laatste wijziging 28/08/2005 18:31)
Avatar van Fenrir PHP expert Iedere functie retourneert een waarde:

  1. function testInteger()
  2. {
  3. return 23;
  4. }


of:

  1. function testString()
  2. {
  3. return "gdfg";
  4. }


De functie testInteger() retourneert de int 23, en testString() retourneert de string gdfg.

Dit kun je zo aanroepen:
  1. $variabele = testString();


Nu zit in $variabele dus "gdfg".

Een constructor retourneert ook een waarde, maar dat is geen string of integer, het is een object van de class:

  1. class test
  2. {
  3. function test()
  4. {
  5. //constructor code
  6. }
  7. }


Alleen zie je hier geen return-statement, (zoals bij return 23;), omdat een constructor alleen een object kan retourneren. Dit object is van de class waarin de constructor staat. Dus de constructor van de class test retourneert een object van het type test.

Dit gebeurt zo:
  1. $object = new test();


Dus net zoals bij een normale functie, alleen staat hier nog "new". Dit geeft aan dat test() geen normale functie is, maar een constructor-functie. Omdat de constructor test() een object van het type "test" retourneert, zit in $object nu een object van type "test".

De constructor kun je gebruiken om dingen in te zetten waarmee je je object "opstart", of "klaarmaakt voor gebruik".

Je zou bijvoorbeeld:

  1. class test
  2. {
  3. var $nummer;
  4. function test($i)
  5. {
  6. $this->nummer = $i;
  7. }
  8. }


Dus zo roep je het aan:
  1. $object = new test(42);


Omdat dit een constructor-functie is, wordt de code in de constructor van de class test uitgevoerd. Deze code dus:
  1. $this->nummer = $i;


Duidelijk uitgelegd?
Offline leendert - 28/08/2005 22:51 (laatste wijziging 28/08/2005 23:00)
Avatar van leendert HTML beginner Alle drie erg bedankt voor jullie reacties.

Maar ik zie het voordeel dan nog niet perse van de contructor.

Het gaat toch net zo snel als ik gewoon

$obj = new cRekenmachine;
$obj->functie()

ipv
$obj = new cRekenmachine(1,2).

Is de contructor er nou voor gemaakt om het typewerk in te korten ( dus voor de luiere ;) ) programmeurs of... ?


sorry maar ik snap het nog niet helemaal al snap ik het nu al wel meer
:|
Offline nemesiskoen - 28/08/2005 23:21
Avatar van nemesiskoen Gouden medaille

PHP expert
De constructor is ontwikkeld om startprocedures te kunnen lanceren bij het aanmaken van het object.
Ik weet dat bij JAVA (weet niet of het hiervoor origineel is ontwikkeld) wordt gebruikt om de class in kwestie aan te roepen. De enigste manier hiervan is door naar zichzelf te verwijzen via de constructor functie. Anders kan je nooit de class aanroepen waar je in bezig bent.

  1. import libraries...
  2.  
  3. public class test {
  4. function test(args) {
  5. //do calc... etc
  6. anotherFunction(giveArgs);
  7. yetAnotherFunction(giveMoreArgs);
  8. }
  9. function anotherFunction(args) {
  10. }
  11. function yetAnotherFunction(args) {
  12. }
  13. public static void main(String args[]){
  14. test testje = new test(giveArgs); //executes entire program
  15. }
  16. }
Offline Fenrir - 29/08/2005 16:14
Avatar van Fenrir PHP expert Ja, je moet het gebruiken om het typewerk in te korten. De manier waarop je een class gebruik moet altijd zo eenvoudig mogelijk zijn. Dus niet:

  1. $o = new Test();
  2. $o->start('bla bla');


en:

  1. class Test
  2. {
  3. function Test()
  4. {
  5. }
  6.  
  7. function start($str)
  8. {
  9. //doe iets
  10. }
  11. }


maar:
  1. $o = new Test('bla bla');


en:

  1. class Test
  2. {
  3. function Test($str)
  4. {
  5. $this->start($str);
  6. }
  7.  
  8. function start($str)
  9. {
  10. //doe iets
  11. }
  12. }


Dit is omdat je de code voor een class maar 1 keer hoeft te schrijven, en de code van een object ($o = new Test('bla bla'); ) meerdere keren. Dus je kunt beter meer code in je class hebben, want dan bespaar je typewerk, en dan is je code makkelijker te lezen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.417s