Gå til innhold

Arv fra abstrakt klasse


Anbefalte innlegg

Skrevet

Jeg forsøker å lage et html-skjema ved hjelp av php5 og har laget klassene Form, Element, Checkbox, Input og Button.

Element er abstrakt og Checkbox og Input arver denne, Button arver igjen Input.

 

Men når jeg forsøker å kjøre koden min får jeg beskjed om at:

 

Fatal error: Class CheckBox contains 1 abstract methods and must therefore be declared abstract (Element::display) in c:\wamp\www\cms\lib\Form.php on line 37

 

 

Kode:

abstract class Element{
protected $value;
protected $name;

public function __construct($name="", $value=""){
 $this->name = $name;
 $this->value= $value;
}
abstract protected function display();

}

 

class CheckBox extends Element{
public function diplay(){
 print "tull";
}
}

 

class Input extends Element{
protected $text;
protected $type;

public function __construct($text, $type, $name=null, $value=null){
 parent::__construct($text, $type, $name, $value);
}
public function diplay(){
print <<<ELEMENT
$this->text <input type="$this->type" name="$this->name" value="$this->value"><br />
ELEMENT;
}
}

 

class Button extends Input{
 public function __construct($text=null,$type=null, $name=null, $value=null){
 	parent::__construct($text, $type, $name,$value);
 }

}

 

 

Testen min:

$form = new Form();
$name = new Input("Brukernavn", "text","navn", "møkkaprogram");
$password = new Input("Passord", "password", "password");
$submit = new Button("", "submit", "submit", "trykk her");
$elements = array($name, $password, $submit);
$form->showForm($elements);

 

Noen som ser hva jeg gjør galt? Jeg har nemlig gjort akkurat det samme (protected abstract function ett_eller_annet(); og extends et annet sted og da funket det.

Videoannonse
Annonse
Skrevet
Skulle til å si det.

protected som arves er private, ikke public

6165819[/snapback]

 

nei. jeg kan ikke redusere synlighet til arvede metoder. Så protected blir enten protected eller public. Public blir public i barna også

Skrevet (endret)

hæ? Det strider mot alle andre språk isåfall.

 

Dvs:

public er alltid public og tilgjengelig overalt.

protected er begrenset til klassen og subklasser, men kun direkte subklasse har tilgang. Subklasser til subklassen har ikke tilgang.

private er begrenset til klassen alene, og ingen andre.

Endret av Nazgul
Skrevet
hæ? Det strider mot alle andre språk isåfall.

 

Dvs:

public er alltid public og tilgjengelig overalt.

protected er begrenset til klassen og subklasser, men kun direkte subklasse har tilgang. Subklasser til subklassen har ikke tilgang.

private er begrenset til klassen alene, og ingen andre.

6166045[/snapback]

Jeg snakker om forhold mellom forelder og barn. Hvis forelder har en protected kan jeg ikke gjøre barnas variabel eller funksjon private.

 

Mulig jeg har misforstått ditt innlegg, eller du mitt.

Skrevet

Mer enn som så er jeg redd, tror jeg har misforstått hvordan protected funker. Jeg synes dog at virkemåten er litt uventet, men jeg har sjekket det og det du sier stemmer.

Beklager dette!

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...