我有一个名为Sharer
的类,它在构造方法中接受Service
接口。 Service
可以是FacebookService
或TwitterService
,依此类推。每个Service
类都有一个post
方法,它使用自己的连接(在本例中为facebook,twitter)发布传递给该方法的任何数组数据。
现在将Sharer
类normalizes
数据发送到service
的post方法之前。通过规范化,它会检查我们发送给post
方法的内容是仅仅是一个简单数组还是Model
类。 Model
可以是Project
模型,也可以是Image
模型,或Video
模型等等。
如果是模型类,则调用该特定模型的变换器。 Transformers
只是辅助类,接受模型实例,在这种情况下它们有两种方法 - facebook
和twitter
。每个方法都返回一个特定于连接的格式化数组。
因此,例如,facebook
方法从模型中获取必需的字段(在facebook上发布所需的字段)并将该数组发回。而twitter方法对twitter的必填字段也是如此。
现在我有点困惑的是,在变换器类上调用该特定方法。我想做这样的事情:
if(we are sharing on facebook) {
then call the facebook method
}
if(we are sharing on twitter) {
then call the twitter method
}
但显然我想以某种方式让它变得动态而没有这些if语句。对此更好的方法是什么?
答案 0 :(得分:0)
我解决了这个问题:
$method = $this->resolveMethodToCall();
protected function resolveMethodToCall()
{
$reflection = new ReflectionClass($this->service); // service being either a FacebookService class or TwitterService
$shortName = $reflection->getShortName();
return strtolower(str_replace('Service', '', $shortName));
}
可能不是最好的解决方案,但效果很好,在此之后,我正在检查解析方法是否确实存在于变换器类中,如果它没有,则抛出异常。