CruellaDeVille Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 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. Lenke til kommentar
CruellaDeVille Skrevet 23. mai 2006 Forfatter Del Skrevet 23. mai 2006 Løst Jeg er en ordblid idot Klart at parser reagerer på diplay-metoden min:( Lenke til kommentar
Peter Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 Skulle til å si det. protected som arves er private, ikke public Lenke til kommentar
CruellaDeVille Skrevet 23. mai 2006 Forfatter Del Skrevet 23. mai 2006 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å Lenke til kommentar
Peter Skrevet 23. mai 2006 Del Skrevet 23. mai 2006 (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 23. mai 2006 av Nazgul Lenke til kommentar
CruellaDeVille Skrevet 24. mai 2006 Forfatter Del Skrevet 24. mai 2006 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. Lenke til kommentar
Peter Skrevet 24. mai 2006 Del Skrevet 24. mai 2006 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! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå