面向对象:类是否应该为自己获取信息


OOP: Should classes obtain information for themselves?

我正在开发一个类,它将使用凭据从远程源获取一些信息。这些凭证不会经常更改,因此它们可以作为配置的一部分。我的问题是,在PHP OOP中什么是更好的实践:

  1. 类在构建时从配置中读取这些凭据。

    public function __construct()  
    {  
        //get credentials from database, etc...  
    }
    
  2. 调用者类在构造时提供它们作为参数。

    public function __construct($credentials)  
    {  
        //save them for later use  
    }
    

类不应该依赖于外部变量,除了参数。如果您以这种方式构造程序,则可以在其他程序中重用您的类,或者在具有其他参数的同一程序中重用您的类。你应该问自己的问题是:我能再次使用这门课吗?在这种情况下,答案是否定的。所以给它一个参数。

如果你觉得一遍又一遍地给出参数很烦人。你可以考虑使用dependencyinjection来自动给出正确的参数。或者使用基于配置构造类的工厂模式。

第二个例子。因为您对其他类的依赖更少,因此具有更高的可重用性。

这可能是有用的:为什么web架构应该是松耦合的?

#1:在某些情况下,如果您不需要始终初始化值

class Mysql{    
    public function __construct(){
        $conn = mysql_connect("localhost", "root", "") or die("Error");
        mysql_select_db("dbname",$conn) or die("Error");
    }
    public function inser_data(){
        // query here...
    }
}

#2:这取决于类的行为。如果你需要设置值来运行你的类,那么你需要总是获取数据。

class Bike{
    var $speed;
    var $type;
    public function __construct($properties){
        $this->speed = $properties["speed"];
        $this->type = $properties["type"];
    }
    public function calculation(){
    // script here...
   }
}