[PHP] variable class + constructor

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • -J00P-
  • Registratie: September 2004
  • Laatst online: 20-09 16:45
Hallo, ik probeer op de volgende manier een object aan te maken:

PHP:
1
2
3
4
foreach ($sections as $section) {
    $section = $section['mod_name']::construct();
    $page->addSection($section);
}

zoals je ziet is de objectnaam variabel en wordt bepaald door $section['mod_name'].
Maar op deze manier geeft dit de volgende error:
Parse error: parse error, unexpected T_PAAMAYIM_NEKUDOTAYIM
via de got search was ik er al achter gekomen dat het zonder constructor wel werkt, dus:
PHP:
1
2
3
4
foreach ($sections as $section) {
    $section = new $section['mod_name']();
    $page->addSection($section);
}


weet iemand hoe ik dit wel goed laten werken mét constructor?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Hoezo zonder constructor? Op die manier wordt de constructor ook gewoon aangeroepen. Hoe instantieer je normaal objecten dan?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Als je een nieuwe instantie aanmaakt van een kalsse dan wordt al auto-magisch de constructor() aangeroepen. Waarom zou je dan nog steeds je eigen construct()-method willen aanroepen? Je kan toch ook $this->construct() ofzo plaatsen in __construct() en/of klassenaam() ?

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Die error krijg je omdat je nog geen instantie van dat variable klasse hebt gemaakt, en daardoor de functie in de klasse niet mag/kan benaderen. Daar slaat die error op. Je zult dus eerst je klasse moeten instantieren en daar de construct functie aanroepen. Als je PHP5 gebruikt kun die klasse ook static maken, en kan er wel direct bij.
alienfruit schreef op woensdag 06 juli 2005 @ 17:32:
Als je een nieuwe instantie aanmaakt van een kalsse dan wordt al auto-magisch de constructor() aangeroepen. Waarom zou je dan nog steeds je eigen construct()-method willen aanroepen? Je kan toch ook $this->construct() ofzo plaatsen in __construct() en/of klassenaam() ?
In php4 is de 'constructor' de functie met dezelfde naam als de klasse, in php5 is de 'constructor' de functie met de naam __construct. Als de TS graag constructor functionalteit wil, hangt het even van de php versie hoe het daadwerkelijk geimplementeerd dient te worden.

[ Voor 50% gewijzigd door Sybr_E-N op 06-07-2005 17:37 ]


Acties:
  • 0 Henk 'm!

  • -J00P-
  • Registratie: September 2004
  • Laatst online: 20-09 16:45
Even wat meer informatie:

ik heb de classes:

PHP:
1
2
3
4
5
6
7
8
9
10
class Section {
        function construct() {}
}

//en de variable classe 'X'
class X extends Section {
        function X() {}

        //etc
}


nu wil ik dus graag een instatie maken van class X met de constructor functie van class Section. (X::construct(), toch?).
Daarom kan ik dus geen gebruik maken van de automagisch aangeroepen constructor.
Of zit ik er nu heel erg ver naast :?
offtopic:
Ik zit er nu al zolang (te) moeilijk over te doen doen dat ik onderhand niet meer weet waar ik mee bezig ben :X

Ik maak trouwens gebruik van php4.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
In PHP4 heeft de constructor de naam van de classe. construct is dus gewoon een method.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// php4:
class Section
{
  function Section() { }
}

// php5:
class Section
{
  function __construct() { }
}

$instance = new Section();


Een constructor is niet verplicht overigens. Als je er geen code in zit kun je hem net zo goed weglaten.

[ Voor 25% gewijzigd door Michali op 06-07-2005 20:05 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP4 constructors zijn backwards compatible met PHP5 constructors, dus.

Je kan ook variabele functies gebruiken: $var(); en dan is $var bv. "Section". Dat werkt ook, misschien kun je daar iets mee?
Pagina: 1