Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在接口(OOP)中添加属性是一种好做法吗_Php_Oop_Zend Framework - Fatal编程技术网

Php 在接口(OOP)中添加属性是一种好做法吗

Php 在接口(OOP)中添加属性是一种好做法吗,php,oop,zend-framework,Php,Oop,Zend Framework,请参见以下对象: interface IMedia { public function getThemed(); public function getDownloadLink(); } class Video implements IMedia { public function getThemed() {} public function getDownloadLink() {} } 如果存在一些常见属性,例如: public $size; public

请参见以下对象:

interface IMedia
{
    public function getThemed();
    public function getDownloadLink();
}

class Video implements IMedia
{
    public function getThemed() {}
    public function getDownloadLink() {}
}
如果存在一些常见属性,例如:

public $size;
public $uploadedDate;
public $hitCounts;

可以将它们添加到IMedia吗?还是建议在那个地方使用抽象类?

当然,一般来说,您希望尽可能抽象。因此,访问器/变体完全有意义,以避免仅对访问器/变体进行类型转换。现在可能会引入一个仅用于属性实现的抽象类。

@Muneer

首先,这是不可能的。接口不允许这样做。我建议这样做:

interface IMedia {

}

abstract class AbstractMedia implements IMedia {
  public $property = "value";
}

所以你的意思是,只有抽象类允许实现属性,并且应该避免从接口实现属性?@Muneer:是的,接口只允许常量和方法存根。你们需要像他建议的那个样使用抽象类。抽象类和常规类都是很好的选择。在接口中这是不可能的,PHP不允许您这样做,因为这是一个语法错误。接口中只允许使用方法和常量。如果我将IMedia接口转换为抽象类并在其中添加属性和方法,会怎么样?我会问,赢了什么?您失去了抽象,获得了一个平凡代码的实现。顺便说一句:您需要实现getter和setter,就像在Java中一样。具体计划是什么?