Vanuit parent funcie aanroepen van child

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tivaro

Tivaro

22/06/2007 13:23:00
Quote Anchor link
Ik heb een abstracte klasse testParent, als die aangemaakt word moet er een hoop gebeuren,
daarna moeten er dingen gebeuren die per child-object anders zijn.
Daarom wil ik dat als het child aangemaakt word, de constructor v/d parent aangeroepen word en die roep dan weer een functie van de child aan.
Dat laatste werkt niet,
voorbeeld:
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
<?php
class testParent{
  var
$id;

  function
testParent($id){
    $this->id=$id;
    $this->load();
  }
  function
load(){
     //deze klasse moet in de subklasse gevuld worden
  }
}


class test extends testParent{
  function
load(){
    echo 'laden';
  }
}

?>

Is dit überhaubt wel mogelijk, en wat moet ik anders doen?
 
PHP hulp

PHP hulp

27/12/2024 11:24:39
 
M Ypma

M Ypma

22/06/2007 13:36:00
Quote Anchor link
je kunt de methods en properties benaderen door de parent syntax. In jouw geval wordt dat dus:
parent::load()
 
Tivaro

Tivaro

22/06/2007 13:47:00
Quote Anchor link
Dat werkt al, als ik een testobject aanmaak, word de constructor van testParent uitgevoerd, echter de functie load() van de klasse test word niet uitgevoerd, in plaats daarvan krijg ik een error:
Warning: Missing argument 1 for testparent() in /home/tivaro.php on line 5
Gewijzigd op 01/01/1970 01:00:00 door Tivaro
 
Danny Roelofs

Danny Roelofs

22/06/2007 14:07:00
Quote Anchor link
Ja je gebruikt een parameter voor de constructor uit testParent:

function testParent($id)


Dus dit geeft een fout:

$test = new test();

En dit niet: <--- maar even ter verduidelijking

$id = 20;
$test = new test($id);

noot: de oplossing maar even duidelijker gemaakt
Gewijzigd op 01/01/1970 01:00:00 door Danny Roelofs
 
Tivaro

Tivaro

22/06/2007 15:53:00
Quote Anchor link
Dat geeft dus die fout,
want als ik de regel $this->load(); vercommentarieer?? (als ik er //$this->load();) van maak krijg ik die error niet.
 
Cees St

Cees St

22/06/2007 16:26:00
Quote Anchor link
Dus dit geeft een fout:

$test = new test();

En dit niet:

$id = 20;
$test = new test($id);

Dat klopt toch, je constructor testParent($id) verlangt een een ID
 
Tivaro

Tivaro

22/06/2007 18:51:00
Quote Anchor link
nee dit geeft een fout:
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 testParent{
  var
$id;

  function
testParent($id){
    $this->id=$id;
    $this->load();
  }
  function
load(){
     //deze klasse moet in de subklasse gevuld worden
  }
}


class test extends testParent{
  function
load(){
    echo 'laden';
  }
}


$test = new test(20);

?>


en dit wel:
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 testParent{
  var
$id;

  function
testParent($id){
    $this->id=$id;
    //$this->load();
  }
  function
load(){
     //deze klasse moet in de subklasse gevuld worden
  }
}


class test extends testParent{
  function
load(){
    echo 'laden';
  }
}


$test = new test(20);

?>
 
Danny Roelofs

Danny Roelofs

22/06/2007 19:26:00
Quote Anchor link
Dan zou ik het niet zo weten, ik heb deze welke bij jou fout gaat:

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 testParent{
  var
$id;

  function
testParent($id){
    $this->id=$id;
    $this->load();
  }
  function
load(){
     //deze klasse moet in de subklasse gevuld worden
  }
}


class test extends testParent{
  function
load(){
    echo 'laden';
  }
}


$test = new test(20);

?>


Toch werkend, en dit zowel onder php v4.4.4 als v5.2.2
Gewijzigd op 01/01/1970 01:00:00 door Danny Roelofs
 
Tivaro

Tivaro

22/06/2007 22:20:00
Quote Anchor link
Je hebt gelijk, bij mij ook
Ik ga nog eens even kijken.
 
Tivaro

Tivaro

22/06/2007 22:21:00
Quote Anchor link
Hij doet het nu wel, ik had de naam van de klasse niet goed overgenomen :$
__construct() (en sowieso OOP in php5) vind ik toch fijner,

is het in PHP 5 ook zo dat __construct van de parentklasse ook word aangeroepen als die in de childklasse niet is gedefinieerd?
Dus dat dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
class vader{
  function
__construct(){
    echo 'hoi, ik word aangemaakt';
  }
}

class zoon extends vader{
}

$zoon = new zoon();
?>

"hoi, ik word aangemaakt" weergeeft?
Gewijzigd op 01/01/1970 01:00:00 door Tivaro
 
Pim Vernooij

Pim Vernooij

26/06/2007 01:15:00
Quote Anchor link
Ja dat is zo :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.