Avatar billede kirsten Nybegynder
17. april 2010 - 21:25 Der er 6 kommentarer og
1 løsning

klasse nedarving

Hej,
sidder lidt og koger over følgende....

En klasse (a) som extender en anden klasse (b).
Begge klasser har et interface.
Begge klasser har også en konstruktør.
Men når jeg opretter et objekt (a) får jeg følgende fejl:

Fatal error: Declaration of User::__construct() must be compatible with that of MembershipInterface::__construct()

Jeg er ikke helt sikker på hvordan jeg løser problemet...
Jeg kan jo fjerne konstruktøren i Membership klassen, men det er jeg ikke ret interreseret i..
Jeg kan også slå de to interfaces sammen, men så er jeg 100 % afhængig af at jeg SKAL kalde min User klasse hvergang...

Jeg håber der er nogen der kan guide mig lidt på vej ?
Avatar billede Slettet bruger
17. april 2010 - 21:53 #1
Du har højst sandsynlig en fejl i de parametre du tilføjer til __construct() i enten dit interface eller din klasse. Har lavet et eksempel her:



----- A.php -----
<?php

class A implements AInterface
{
    public function __construct($param1, $param2)
    {
        echo 'Dette er klasse A';
    }
}



----- AInterface.php -----
<?php

interface AInterface
{
    public function __construct();
}



----- index.php -----
<?php

require_once 'AInterface.php';
require_once 'A.php';

$a = new A('param', 'param');



Dette giver fejlen: "Fatal error: Declaration of A::__construct() must be compatible with that of AInterface::__construct() in /A.php on line 3"

Den siger altså, at __construct() i A.php (altså klassen) ikke er angivet som den skulle, ifølge interfacet. For at løse problemet, kan interfacet f.eks. ændres til:



----- AInterface.php -----
<?php

interface AInterface
{
    public function __construct($param1, $param2);
}



Håber dette har hjulpet!
Avatar billede kirsten Nybegynder
17. april 2010 - 22:05 #2
Problemet ligger ikke i klasse A's interface.

Eksempel:

class A extends B implements AInterface
{
private $varA;
public function __construct($varA)
{
$this->varA = $varA;
}

interface AInterface
{
public function __construct($varA);
}

class B implements BInterface
{
private $varB;
public function __construct($varB)
{
$this->varB = $varB;
}

interface BInterface
{
public function __construct($varB);
}

Når jeg så opretter objektet A får jeg fejlen.
Håber det giver mening...
Avatar billede arne_v Ekspert
17. april 2010 - 22:38 #3
Hvad pokker får man ud af at definere constructor i et interface ????

Tror du ikke bare at de constructorer skal slettes fra interfacene ?
Avatar billede kirsten Nybegynder
17. april 2010 - 22:51 #4
Jo nu er jeg ikke super skarp i interfaces,
men normalt så definere man ikke konstruktøren i interfacet ?
Avatar billede arne_v Ekspert
17. april 2010 - 23:15 #5
Nej.
Avatar billede kirsten Nybegynder
17. april 2010 - 23:15 #6
Fik lige læst lidt op på interfaces, og du har ret :)
Ingen Kontruktøre i interfaces.
Ved ikke helt om det er en fejl i PHP, men det er ikke tilladt i JAVA. Men nu er det også lang tid siden jeg har rodet med java.
Smider du et svar ?
Avatar billede arne_v Ekspert
17. april 2010 - 23:22 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester