PHP-OOP扩展了两个类?

use*_*810 5 php oop

我是OOP的初学者,现在我正在尝试编写一些PHP类来连接FTP服务器.

class ftpConnect {
  private $server;
  private $user;
  private $password;

  private $connection_id;
  private $connection_correct = false;

  public function __construct($server, $user = "anonymous", $password = "anonymous@mail.com") {

    $this->server   = $server;
    $this->user     = $user;
    $this->password = $password;

    $this->connection_id      = ftp_connect($this->server);
    $this->connection_correct = ftp_login($this->connection_id, $this->user, $this->password);

    if ( (!$this->connection_id) || (!$this->connection_correct) ){
        echo "Error! Couldn't connect to $this->server";
        var_dump($this->connection_id);
        var_dump($this->connection_correct);
        return false;
    } else {
        echo "Successfully connected to $this->server, user: $this->user";
        $this->connection_correct = true;
        return true;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我估计现在这个班级的身体是微不足道的.

主要问题是我对理解OOP的想法有些问题.

我想在每次运行代码时添加发送电子邮件.我已经下载了PHPMailer Class并用它扩展了我的类:

class ftpConnect extends PHPMailer {...}
Run Code Online (Sandbox Code Playgroud)

我添加了一些变量和方法,一切都按预期工作.

我想:为什么不在数据库中添加存储内容.每次用户运行上面的代码时,应将适当的信息存储在数据库中.

我可以编辑我的ftpConnect class并添加连接到构造函数的数据库,以及其他一些更新表的方法.但是数据库连接和所有这些东西将来可以被其他类使用,所以它绝对应该在单独的类中实现.但是我的"主要" ftpConnect class已经扩展了一个类,并且不能再扩展一个类.

我不知道如何解决这个问题.也许我ftpConnect class是复杂的,我应该以某种方式将它分成几个较小的类?任何帮助深表感谢.

Pee*_*Haa 7

对于初学者,我认为你的班级有一个设计缺陷.你的构造函数正在做工作.这不是构造函数应该在适当的OOP中做的事情.您的构造函数应该只设置属性,您应该有一个单独的方法connect().

第二个ftpConnect永远不应该延伸PHPMailer.它们是两个完全不同的东西.阅读Liskov替代原理,它是SOLID原则的一部分.

如果您的类需要对数据库执行某些操作或需要发送邮件,则需要将这些实例注入到类中而不是扩展它们.这称为依赖注入,这将使以后更容易进行单元测试,因为您可以轻松使用模拟邮件程序类或模拟数据库类.

如果你想发送邮件,拥有数据库访问权限并使用FTP,你至少需要3个不同的(分离的)类(甚至可能需要为db等做一些映射).基本上每个班级都应该有一个责任而一个只有一个.这被称为单一责任原则.

对于一些一般参考,请参阅