Я создаю абстрактный класс 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
}
}
Каков наиболее эффективный (и правильный) способ объявления типа $ в абстрактном классе? Я хочу ограничить тип $ только внутри объявленного подмножества из абстрактного класса.
Спасибо.
Вы можете использовать метод класса, чтобы проверить значение.
<?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()
{
}
}
Других решений пока нет …