Php 为什么在单独处理项目时会使用abstraciton?

Php 为什么在单独处理项目时会使用abstraciton?,php,oop,methods,abstract,abstraction,Php,Oop,Methods,Abstract,Abstraction,从一开始我就认为抽象是没有意义的。。我只是不知道一个人是否应该使用它们——特别是在没有其他人帮助的情况下作为自由职业者工作时 这里有一个我制作的小班来演示它。我在这些课上所做的事可以很容易地在普通课上完成。不需要抽象类。有人能告诉我在一个小例子中抽象类在哪里有用吗。我想知道何时以及为什么使用抽象,我不是在问 abstract class Computer{ abstract function turn_on(); abstract function turn_of();

从一开始我就认为抽象是没有意义的。。我只是不知道一个人是否应该使用它们——特别是在没有其他人帮助的情况下作为自由职业者工作时

这里有一个我制作的小班来演示它。我在这些课上所做的事可以很容易地在普通课上完成。不需要抽象类。有人能告诉我在一个小例子中抽象类在哪里有用吗。我想知道何时以及为什么使用抽象,我不是在问

    abstract class Computer{
    abstract function turn_on();
    abstract function turn_of();
    abstract function activate_fan();
}

class Toshiba extends Computer{
    function turn_on(){
        echo __class__ ." is now on. Green light showing </br>";
        $this->activate_fan();
    }

    function turn_of(){
        echo __class__ ." is now of. No light showing </br>";
    }

    public function activate_fan(){
        echo __class__ . " Fan is now running, speed 300rps </br>";
    }
}


class Asus extends Computer{
    function turn_on(){
        echo __class__ ." is now on. Blue light showing </br>";
        $this->activate_fan();
    }

    function turn_of(){
        echo __class__ ." is now of. No light showing </br>";
    }

    public function activate_fan(){
        echo __class__ . " fan is now running, speed 80rps </br>";
    }
}

$Toshiba = new Toshiba;
$Asus = new Asus;

$Toshiba->turn_on();
$Asus->turn_on();
抽象类计算机{
抽象函数开启();
抽象函数turn_of();
抽象函数激活_fan();
}
东芝扩展计算机{
函数开启(){
echo“class”现在打开。绿灯亮起;
$this->激活_fan();
}
函数turn_of(){
回声等级现在为。无灯光显示
”; } 公共功能激活_fan(){ 回音等级。风扇正在运行,速度为300转/秒; } } Asus类扩展计算机{ 函数开启(){ echo“class”现在打开。蓝色灯光显示
”; $this->激活_fan(); } 函数turn_of(){ 回声等级现在为。无灯光显示
”; } 公共功能激活_fan(){ 回音等级。风扇正在运行,速度为80转/秒; } } $Toshiba=新东芝; $Asus=新Asus; $Toshiba->打开(); $Asus->打开();
这个例子怎么样:

function restartComputers($computers) {
  foreach ($computers as $c) {
    $c->turn_of();
    $c->turn_on();
  }
}

你把抽象和界面混淆了吗?您的
计算机
类实际上只是定义了空方法,因此根本不应该是抽象的。然而,您可以轻松地将所有()逻辑从每个具体类转移到抽象中,因为它是相同的。。。。然后,您不需要在
Asus
Toshiba
之间复制代码,@MarkBaker的可能重复项也可以在基类/父类中完成。。是的,基类/父类和抽象类之间唯一显著的区别是不能抽象类。。。。所以你不能实例化一台抽象的通用
计算机
,只能实例化像
Asus
Toshiba
这样的特定型号的计算机。。。。。请注意,这并不是一个特别好的例子