假設(shè)我有兩個(gè)名為Userand的類Product。這兩個(gè)都需要保存在數(shù)據(jù)庫(kù)中。第三個(gè)類稱為PersistencyHandler處理所有數(shù)據(jù)庫(kù)交互(為了遵守單一責(zé)任原則和依賴倒置)。這是這個(gè)類的樣子:<?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 }}?>我來(lái)自 Java 經(jīng)驗(yàn),我確信使用instanceof是一種非常糟糕的做法(至少在 Java 中)。例如,在 Java 中,我曾經(jīng)使用重載方法來(lái)解決此類問(wèn)題。我檢查了php.net和其他網(wǎng)站(包括這個(gè)網(wǎng)站),但我沒有找到一個(gè)很好的答案來(lái)回答我的問(wèn)題:以正確的方式實(shí)現(xiàn)上述代碼的相同行為的更好方法是什么?請(qǐng)注意,我有一個(gè)帶有單個(gè)參數(shù)的方法,調(diào)用的方法由參數(shù)的類型決定。
在 PHP 中實(shí)現(xiàn)相同的方法重載行為的最佳方法是什么?
函數(shù)式編程
2022-10-22 15:43:53