PHP使用抽象类还是接口?
在这段代码中,使用抽象类代替接口更好,还是像现在这样好?若然,原因为何PHP使用抽象类还是接口?,php,interface,abstract-class,factory-pattern,abstraction,Php,Interface,Abstract Class,Factory Pattern,Abstraction,在这段代码中,使用抽象类代替接口更好,还是像现在这样好?若然,原因为何 /** contract for all flyable vehicles **/ interface iFlyable { public function fly(); } /* concrete implementations of iFlyable interface */ class JumboJet implements iFlyable { public function fly() {
/** contract for all flyable vehicles **/
interface iFlyable {
public function fly();
}
/* concrete implementations of iFlyable interface */
class JumboJet implements iFlyable {
public function fly() {
return "Flying 747!";
}
}
class FighterJet implements iFlyable {
public function fly() {
return "Flying an F22!";
}
}
class PrivateJet implements iFlyable {
public function fly() {
return "Flying a Lear Jet!";
}
}
/** contract for conrete Factory **/
/**
* "Define an interface for creating an object, but let the classes that implement the interface
* decide which class to instantiate. The Factory method lets a class defer instantiation to
* subclasses."
**/
interface iFlyableFactory {
public static function create( $flyableVehicle );
}
/** concrete factory **/
class JetFactory implements iFlyableFactory {
/* list of available products that this specific factory makes */
private static $products = array( 'JumboJet', 'FighterJet', 'PrivateJet' );
public static function create( $flyableVehicle ) {
if( in_array( $flyableVehicle, JetFactory::$products ) ) {
return new $flyableVehicle;
} else {
throw new Exception( 'Jet not found' );
}
}
}
$militaryJet = JetFactory::create( 'FighterJet' );
$privateJet = JetFactory::create( 'PrivateJet' );
$commercialJet = JetFactory::create( 'JumboJet' );
界面更加灵活。通过这种方式,并不是所有flies都必须从同一基类继承(php不支持多重继承) 所以 有时不需要灵活性 抽象类还可以提供函数定义,如果多个飞行类需要相同的fly()方法,则可以减少代码重复
希望这能帮助您了解您的选择界面更灵活。通过这种方式,并不是所有flies都必须从同一基类继承(php不支持多重继承) 所以 有时不需要灵活性 抽象类还可以提供函数定义,如果多个飞行类需要相同的fly()方法,则可以减少代码重复
希望这能帮助您理解您的选择这可能更适合codereview.stackexchange.com这也将是基本的意见基础,但我会给出一个意见(不是答案)。我认为你的例子过于简单,无法确定哪一个更好。例如,如果所有飞行器都可能存在共同的行为,这些行为可能有助于更好地重用代码(即改变高度、改变航向、起飞、着陆),并且只有在某些情况下才具有覆盖行为,那么,抽象类可能比接口更可取。这可能更适合codereview.stackexchange.com。这在很大程度上也将成为意见库,但我将给出一个意见(不是答案)。我认为你的例子过于简单,无法确定哪一个更好。例如,如果所有飞行器都可能存在一些共同的行为,这些行为可能有助于更好地重用代码(例如,改变高度、改变航向、起飞、降落),并且只在某些情况下重写行为,那么抽象类可能比接口更可取。这很有意义。Thnaks@David Chan很有道理。Thnaks@David Chan
class bird extends animal implements flyable
class plane extends machine implements flyable
class cloud implements flyable