1

今日から、非静的データベースの変数をphpプロジェクトの関数に渡したので、データベースにアクセスする必要がありました。複数のデータベース接続についてすべて読んだので、データベース接続を静的関数に変更しました。これにより、すべての関数で、関数のパラメーターとして渡すことなく、データベース接続にアクセスできるようになりました。したがって、たとえばmyDatabaseConnection :: myFirstdatabase-> prepareなどを使用して、データベース接続(異なるデータベースでも)にアクセスすることができます。

重要なのは、ベストプラクティスとは何ですか?このようにするのは良いことですか。一部の関数(たとえば、データベースからデータを読み取るため)はデータベース接続に依存していますが、関数のパラメーターからデータベース接続変数を削除すると、何か(一種の依存関係)が欠落しているように見えます。

では、そのためのベストプラクティスは何ですか?データベース接続を変数として、データベースアクセスを必要とする関数に渡しますか?

どうもありがとうございます。

つながりのあることを理解しています。しかし、私のプロジェクトの他の機能についてはどうでしょうか。たとえば、データベースからすべてのメンバー名を読み取る関数のように?その関数にデータベース接続変数を渡しますか、それとも私の「グローバル」静的データベース接続を使用してその関数内のデータベースへの接続にアクセスしますか。グローバルではないことは知っていますが、静的データベース接続にはどこからでもアクセスできます...

4

2 に答える 2

0

データベース接続オブジェクトには、インスタンス化時に依存関係が挿入されている必要があります。その後、クラスは再利用可能です。私見では

于 2013-02-02T21:14:24.533 に答える
0
<?php
require_once('CLASSdatabase.php');

class AUTHENTICATE{
    private $user_database_object;
    private $current;
    private $email_id;
    private $password;
    private $error;

    function __construct($email_id,$password){
        $this->user_database_object=new MYSQL_DATABASE("user");
        $this->email_id=$email_id;
        $this->password=$password;
    }

    private function verify_password(){
        $sql="select password from `users` where email_id='";
        $sql.=$this->email_id."';";
        $this->user_database_object->open_connection();
        $row=$this->user_database_object->fetch_array($this->user_database_object->query($sql));
        // code ...
        $this->user_database_object->close_connection();
    }
}
// code ..
?>

CLASSdatabase.php

<?php
require_once("config.php");

    class MYSQL_DATABASE{
        private $dbname;
        private $connection;
        public $last_query;

        function __construct($dbname){
        $this->dbname=$dbname;
        }

        public function open_connection(){
        }
        public function close_connection(){
        }
        public function query($sql){
        }
        public function fetch_array($result_set){
        }
        // code ...
    }
?>
于 2013-02-02T21:19:57.423 に答える