2017-04-26 2 views
0

nehme ich eine Klasse Auto ---Pflichtklassenattribut für Kindklasse

class Car{ 
    var $type; 

    function func1(){ 
    } 

    function func2(){ 
    } 
} 

Jetzt Klassen, die dieses ich sie alle erweitern wollen $ Art zu initiieren. Sie müssen etwas wie tun -

class Taxi extends class Car{ 
    var $type = 'taxi'; 
} 

Wie kann ich das erreichen? abstrakte Klasse - abstrakte Variable?

Antwort

0

Zunächst einmal alle Syntaxfehler haben, können Sie nicht mit Eigenschaften var deklarieren, müssen Sie Syntaxfehler Taxi in deklarierte Klasse sollte es

class Taxi extends Car{ 
    public $type; 
} 

sein Ich glaube, Sie wollen, so etwas zu realisieren.

abstract class AbstractCar 
{ 
    public $type; 

    public function __construct() 
    { 
     $this->type = static::TYPE; 
    } 
} 

class Taxi extends AbstractCar 
{ 
    //const TYPE = 'foobar'; 
} 

$car = new Car; //Fatal Error: Undefined class constant 'TYPE' (uncomment const TYPE = 'foobar';) 
echo $car->type; 
+1

Ich habe genau danach gesucht. Danke :) – Alice

+0

Aber irgendwie öffentlich $ type = 'taxi'; gibt mir keinen Fehler es funktioniert gut – Alice

+0

ja es sollte leer sein, eine Sekunde werde ich meine Antwort bearbeiten. –

1

Der einzige Weg, dies zu tun ist, einen Scheck in ein final Konstruktor machen:

 
abstract class Car { 

    public $type; 

    final public function __construct() 
    { 
     if (! isset($this->type)) { 
      throw new RuntimeException(
       sprintf('%s::$type is undefined', __CLASS__) 
      ); 
     } 
    } 

} 

Dass die Klasse natürliche abstrakt sein sollte, weil es offensichtlich verlängert werden muss, sonst aber isn Das ist wirklich notwendig.

+0

wird scheitern, wenn Kind-Klasse haben einen eigenen Konstruktor ist – Alice

+0

Hängt davon ab, was meinen Sie mit „nicht bestanden“ ... Ja, kann das Kind Klasse * nicht * haben einen Konstruktor überhaupt, wenn es arbeiten will, aber auf der anderen Seite - Es gibt keinen anderen Weg, um es wirklich zu zwingen, das Eigentum zu deklarieren. – Narf

Verwandte Themen