我正在尝试设计一些类层次结构,但我在这部分“卡住”了。
可以说我有以下课程
abstract class Video
{
const TYPE_MOVIE = 1;
const TYPE_SHOW = 2;
abstract public function getTitle();
abstract public function getType();
}
class Movie extends Video
{
// ...
public function getType()
{
return self::TYPE_MOVIE;
}
}
class Show extends Video
{
// ...
public function getType()
{
return self::TYPE_SHOW;
}
}
在系统的不同部分,我有(解析器)类,它封装了电影和节目对象的创建并返回 obj。给客户。
问题:获取 obj 类型的最佳方法是什么?从解析器/工厂类返回,以便客户端可以执行类似的操作
$video = $parser->getVideo('Dumb and Dumber');
echo $video->getTitle();
// Way 1
if($video->getType == 'show') {
echo $video->getNbOfSeasons();
}
// Way 2
if($video instanceof Show) {
echo $video->getNbOfSeasons();
}
// Current way
if($video->getType == Video::TYPE_SHOW) {
echo $video->getNbOfSeasons();
}
有没有比我的解决方案更好的方法(读作:我的解决方案很烂吗?)?