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
这样的特定型号的计算机。。。。。请注意,这并不是一个特别好的例子