Toon posts:

[php4] extended classes initieren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Om maar met de deur in huis te vallen. De volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
class object1{
    var $var1 = '';
    
    function object1($value){
        $this->var1 = $value;
    }
}

class object2 extends object1{
    var $var2 = '';
    
    function object2($value, $value2 = NULL){
        $this->var2 = $value;
        $this->object1($value2);
    }   
}

$test = new object2('hoi','hallo');
print 'variabele 1: ' . $test->var1 . '<br />';
print 'variabele 2: ' . $test->var2 . '<br />';
?>


class object 2 breidt dus object 1 uit.
Beide classes hebben een constructor waaraan je een variabele kunt meegeven.
Bovenstaande manier werkt wel. Maar is dit nu de enige juiste manier om beide classes te initieren!?
Voor m'n gevoel zie ik iets over het hoofd, maar ik zou niet weten wat.

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Ja, dit is de enige manier. Wat had je anders precies in gedachten, wat zou handiger kunnen volgens jou? Dan kunnen we er eens naar kijken.

Verwijderd

Topicstarter
Geen idee ...

  • pjvandesande
  • Registratie: Maart 2004
  • Nu online

pjvandesande

GC.Collect(head);

code:
1
public Object2(string s1, int index) : base(index)


PHP kent niet zoiets als base?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

nope, in php5 kun je nog wel iets doen als parent::__construct($val), maar echt mooi zal het met php nooit worden :X..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • pjvandesande
  • Registratie: Maart 2004
  • Nu online

pjvandesande

GC.Collect(head);

Janoz schreef op vrijdag 02 september 2005 @ 11:16:
nope, in php5 kun je nog wel iets doen als parent::__construct($val), maar echt mooi zal het met php nooit worden :X..
Is imho netter, maar dit komt misschien omdat ik het meer op die manier gewend ben.

Ik heb het niet zo op dat web-dev (lees PHP) ;)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 22:07

Bosmonster

*zucht*

parent::object1($value2)

http://nl3.php.net/manual/en/keyword.parent.php

wat ook nog wel kan:

PHP:
1
2
$par = get_parent_class($this);
parent::$par($value2);


volgens mij of iets dergelijks.. echt mooi is het niet :)

[ Voor 104% gewijzigd door Bosmonster op 02-09-2005 11:46 ]


  • pjvandesande
  • Registratie: Maart 2004
  • Nu online

pjvandesande

GC.Collect(head);

Maar dan praten we over een function, kan die ook met de ctor?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 22:07

Bosmonster

*zucht*

questa schreef op vrijdag 02 september 2005 @ 11:44:
[...]


Maar dan praten we over een function, kan die ook met de ctor?
A. ik heb het over een method
B. Wat is het verschil tussen een constructor en een method? In PHP ongeveer 0,0

Das dus een voordeeltje overigens van PHP5, waar de constructor een vaste naam heeft. Hoef je niet moelijk te doen met get_parent_class() enzo.

[ Voor 20% gewijzigd door Bosmonster op 02-09-2005 11:49 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

questa:
Maar dan praten we over een function, kan die ook met de ctor?
Helaas kan je de constructor niet anoniem aanroepen in php4. Je roept de constructor dus aan door parent::NaamVanParentClass (); aan te roepen. (Dat is namelijk de parent constructor)
Bosmonster:
B. Wat is het verschil tussen een constructor en een method? In PHP ongeveer 0,0
Nou, er is een klein, doch essentieel verschil, lijkt mij, dat de constructor aangeroepen wordt met de new operator :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 22:07

Bosmonster

*zucht*

drm schreef op vrijdag 02 september 2005 @ 11:51:
[...]

Helaas kan je de constructor niet anoniem aanroepen in php4. Je roept de constructor dus aan door parent::NaamVanParentClass (); aan te roepen. (Dat is namelijk de parent constructor)


[...]
Nou, er is een klein, doch essentieel verschil, lijkt mij, dat de constructor aangeroepen wordt met de new operator :P
Yeah maar we hebben het hier over de werking vanuit de instantie/constructor. Dan is een constructor niets anders dan een method en is als zodanig aan te roepen als iedere andere willekeurige method met parent::method()

Aangezien in PHP4 dus de functienaam van de constructor gelijk is aan de classnaam kun je die dus ook aanroepen met wat ik eerder vermeldde:

PHP:
1
2
$parent_constructor = get_parent_class ($this);
parent::$parent_constructor ();


Voor wat PHP5 compatibiliteit is zoiets misschien handiger:

PHP:
1
2
3
4
5
6
7
8
9
class Bla {
   function Bla () {
     $this-> __constructor();
   }
   
   function __constructor() {
      // constructor
   }
}


Bij extended classes kun je dan ook gewoon parent::__constructor() aanroepen.

(voor de argumenten kun je zelf wel wat verzinnen trouwens :P)

zou dan zoiets worden
PHP:
1
2
3
function Bla () {
   call_user_func_array (array($this, '__constructor'), func_get_args());
}


(niet getest :P)

[ Voor 25% gewijzigd door Bosmonster op 02-09-2005 12:35 ]

Pagina: 1