2016-07-10 8 views
3

Ich baue eine abstrakte Klasse von Feed Reader, um weitere Adapter zum Lesen aus verschiedenen Datenquellen zu deklarieren. Ich möchte eine der Eigenschaften (Format) erklären, nur innerhalb der ausgewählten Teilmenge (json, xml in diesem Fall) zu sein, wenn die erweiterten Klassen definieren, dh:Eine abstrakte Eigenschaft aus einer Teilmenge deklarieren

abstract Class FeedReader { 
    public $url; 
    //This is the line where I would like to define the type, but available only from a subset (json or xml). 

    abstract function getData(); 
} 


class BBCFeed extends FeedReader { 
    public $type = 'json'; //I want this value to be restricted to be only json or xml 

    function getData() { 
    //curl code to get the data 
    } 
} 

Was die effizienteste ist (und richtig) Art, den $ Typ in der abstrakten Klasse zu deklarieren ?. Ich möchte den $ -Typ so einschränken, dass er nur innerhalb einer deklarierten Teilmenge der abstrakten Klasse ist.

Vielen Dank.

+0

Wie wäre es mit 'abstrakte Funktion getType()'? –

+0

@ D.Dimitrioglo Ich denke, es würde immer noch ermöglichen, die untergeordneten Klassen jeden Typ zu definieren. – Watt

Antwort

1

Sie könnten eine Klassenmethode verwenden, um den Wert zu überprüfen.

<?php 

abstract class FeedReader 
{ 
    public $type; 

    public function setType($type) { 
    switch($type) 
    { 
    case 'json': 
    case 'xml': 
     $this->type = $type; 
     break; 
    default: 
     throw new Exception('Invalid type'); 
    } 
    } 
} 

class BBCFeed extends FeedReader 
{ 
    public $type; 

    public function __construct($type) 
    { 
    $this->setType($type) 
    } 

    function getData() 
    { 
    } 
} 
+0

das sieht ziemlich gut aus und entspricht meiner Erwartung wie es funktionieren soll :) – Watt

Verwandte Themen