2016-07-10 5 views
3

Я создаю абстрактный класс Feed Reader для дальнейшего объявления адаптеров для чтения из разных источников данных. Я хотел бы объявить одно из свойств (формат), чтобы быть только в пределах выбранного подмножества (JSON, XML в данном случае) при определении расширенных классов, а именно:Объявление абстрактного свойства из подмножества

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 
    } 
} 

Что является наиболее эффективным (и правильно) способ объявления типа $ в абстрактном классе ?. Я хочу ограничить тип $ только в пределах объявленного подмножества из абстрактного класса.

спасибо.

+0

Как насчет 'абстрактной функции getType()'? –

+0

@ D.Dimitrioglo Я думаю, что это все равно позволит дочерним классам определять любой тип. – Watt

ответ

1

Вы можете использовать метод класса для проверки значения.

<?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

, который выглядит довольно хорошо и соответствует моему ожиданию, как он должен работать :) – Watt

Смежные вопросы