2016-03-29 7 views
0

私は現在、.NetバックグラウンドでPHPを学んでいます。私はそれを呼び出すことができるように、関数にデータベース接続文字列を設定する方法を設定したかったのです。私はクラスを作成し、これが適切に行われたかどうか、または私が間違いを犯したかどうかを確認したいだけでした。これはPHP OOPにとって最適な方法ですか?

ページ:module.php

// Database Connection Settings 
$_SESSION['servername']  = "localhost"; 
$_SESSION['mysql_username'] = "user12345"; 
$_SESSION['mysql_password'] = "mypass12345"; 
$_SESSION['dbname']   = "dbnamehere"; 

class db_Class{ 
    function db_conn() { 
     //global $conn; 
     $conn = new mysqli($_SESSION['servername'], $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 
     // Check connection 
     if ($conn->connect_error) { 
       die("Connection failed: " . $conn->connect_error); 
     } 
     return $conn; 
    } 
} 

ページ:ここに私のコードですtest.phpを

//Bring the class into the page for access. 
include_once("module.php"); 
//Access our class. 
$db_Class = new db_Class; 
$conn = ($db_Class->db_conn()); 
//connect to the database. 
$sql = "SELECT id, region FROM tbl_region;"; 
$result = $conn->query($sql); 
//Print the results out. 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo '<td align="left" valign="top"><p>'.$row["region"].'</p></td></tr>'; 
    } 
} 

これは、セットアップに適切な方法PHPとデータベース接続のためのオブジェクト指向プログラミングですか?もしあなたが私が間違っていることを説明できないのであれば?

+4

率直に言って、それがすべてでOOPとは何の関係もありません。実際には、クラス内にラップされた単なる関数です。クラス宣言を自由に取り出して、関数db_conn()だけを残すことができます –

+1

はい、OOPコーディングを練習する方が良いのですか?もしそうなら、私はクラスを使っているので、これはOOPを考慮する必要はありませんか? –

+4

OOPは構文ではなくアーキテクチャに関するものです。たくさんのクラスのコードを書くことができますが、手続き的なままです。 –

答えて

1

database.phpで

<?php 
class Database { 
    const HOST = 'localhost'; 
    const USERNAME = 'root'; 
    const PASSWORD = 'root'; 
    const DATABASE = 'test'; 

    private static $instance; 

    public static function getInstance() 
    { 
     if (!self::$instance) { 
      self::$instance = new mysqli(Database::HOST, Database::USERNAME, Database::PASSWORD, Database::DATABASE); 
      if (mysqli_connect_error()) { 
       throw new Exception('Unable to connect to mysql server ' . mysqli_connect_error()); 
      } 
     } 
     return self::$instance; 
    } 
}  

test.phpを

//Bring the class into the page for access. 
include_once("Database.php"); 

// Database Connection 
$conn = Database::getInstance(); 
//connect to the database. 
$sql = "SELECT id, region FROM tbl_region;"; 
$result = $conn->query($sql); 
//Print the results out. 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo '<td align="left" valign="top"><p>'.$row["region"].'</p></td></tr>'; 
    } 
} 
+0

このコードはOOPのためのものですか?もしそうなら、あなたはどのように、なぜそれを教えてくれますか? –

+0

はい、私たちはそのクラスで少し変更を加えることができます。インスタンス関数を静的にすることができるので、データベースクラスオブジェクトを作成する必要はありません。 –

+0

ベストプラクティスは、CamelCaseでクラス名を使用し、pascalCaseで関数名を使用することです。それに応じて私の答えを更新しましょう。 –

関連する問題