假设我有两个名为Userand的类Product。这两个都需要保存在数据库中。
第三个类称为PersistencyHandler处理所有数据库交互(为了遵守单一责任原则和依赖倒置)。这是这个类的样子:
<?php
/**
* Class PersistencyHandler
* Handles database using PDO API
*/
class PersistencyHandler{
/**
* PDO connection used to save objects into.
* @var $conn PDO
*/
private $conn;
/**
* PDODatabaseSaver constructor.
* @param $conn PDO
*/
public function __construct($conn){
$this->pdo = $conn;
}
/**
* Saves the given object in the database
* @param $object mixed
*/
public function save($object){
// as PHP does not support classic method overloading for different
// types of objects, this is the cleanest solution I've been able to find.
// And it's still pretty dirty...
if($object instanceof Product) {
$this->saveProduct($object);
} else if($object instanceof User) {
$this->saveUser($object);
} else {
throw new UnsupportedOperationException("Cannot save object, unsupported type."); // custom class
}
}
private function saveProduct(Product $object){
// save Product into database
}
private function saveUser(User $object){
// save User into database
}
}
?>
我来自 Java 经验,我确信使用instanceof是一种非常糟糕的做法(至少在 Java 中)。例如,在 Java 中,我曾经使用重载方法来解决此类问题。
我检查了php.net和其他网站(包括这个网站),但我没有找到一个很好的答案来回答我的问题:
以正确的方式实现上述代码的相同行为的更好方法是什么?
请注意,我有一个带有单个参数的方法,调用的方法由参数的类型决定。
蓝山帝景