从子集声明抽象属性

时间:2016-07-10 15:20:35

标签: php properties abstract

我正在构建一个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
  }
}

在抽象类中声明$ type的最有效(和正确)方法是什么?我想将$ type限制为仅在抽象类的声明子集中。

谢谢。

1 个答案:

答案 0 :(得分: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()
  {
  }
}