基于条件声明私有类变量

时间:2015-04-05 05:31:43

标签: php class oop

我一直在努力改善OOP。我正在编写一个数据库类,它将通过PDO处理简单的数据库连接。现在,我想让它使用不同的变量,如果它是从我的localhost服务器提供的。

请考虑以下代码:

<?php

class Database {

    private $host;
    private $name;
    private $username;
    private $password;  
    public $conn;

    if ($_SERVER['SERVER_NAME'] == "localhost") {
        $host = "change_to_your_db_host";
        $name = "change_to_your_db_name";
        $username = "change_to_your_db_username";
        $password = "change_to_your_db_password";       
    }
    else {
        $host = "change_to_your_db_host";
        $name = "change_to_your_db_name";
        $username = "change_to_your_db_username";
        $password = "change_to_your_db_password";
    }

    public function connect () {

        $this->conn = null;

        try {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
        }
        catch (PDOException $exception) {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;

    }
}

?>

我对一般的课程都很陌生 - 我一直在编写纯粹的基于函数的纯PHP,因为它太长了。

我的问题是:

  1. 在类这样的类中使用$ _SERVER变量是否很酷?

  2. 在类中使用该条件语句来确定私有变量OK吗?这个类将包含在我通过对象类访问数据库的所有其他脚本中。

  3. 是否有一种更有效的方法来写这个,如果有一个被捕获它会引发异常?

  4. 我只是想确保我正在做的事情正在向前发展。我已经写了很长时间的PHP了,我想彻底摆脱我过时的和过时的方法。

1 个答案:

答案 0 :(得分:1)

您应该在类的__construct()方法中执行条件声明,如下所示:

<?php

class Database {

    private $host;
    private $name;
    private $username;
    private $password;  
    public $conn;

    public function __construct()
    {
        if ($_SERVER['SERVER_NAME'] == "localhost")
        {
             $this->host = "change_to_your_db_host";
             $this->name = "change_to_your_db_name";
             $this->username = "change_to_your_db_username";
             $this->password = "change_to_your_db_password";       
        }
        else
        {
             $this->host = "change_to_your_db_host";
             $this->name = "change_to_your_db_name";
             $this->username = "change_to_your_db_username";
             $this->password = "change_to_your_db_password";
        } 
    }

    public function connect () {

        $this->conn = null;

        try {
            $conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
        }
        catch (PDOException $exception) {
            throw $exception // you can throw again this \Exception to handle it in your code using the object 
        }

        $this->conn = $conn;            

        return $this; // you should return $this so you can chain the object methods. Since $con is public, you can still access it

    }
}
  
      
  1. 在类这样的类中使用$ _SERVER变量是否很酷?
  2.   

我不明白为什么不。

  
      
  1. 在类中使用该条件语句来确定私有变量OK吗?这个类将包含在我通过对象类访问数据库的所有其他脚本中。
  2.   

根据@ MarcB的评论,你不能只在方法的顶层运行代码。

  
      
  1. 是否有一种更有效的方式来编写它,而不是如果一个被捕获它会回应异常?
  2.   

是的,再次抛出它,以便您可以使用Database类在最终代码中处理它。