2016-03-29 17 views
0

için en iyi yöntemdir. Net arka plan öğrenme php şimdi geliyorum. Veri tabanı bağlantı dizilimin bir işlevde olmasını sağlamak için bir işlev kurmak istedim, böylece onu arayabilirim. Bir Sınıf oluşturdum ve bunun düzgün bir şekilde yapılıp yapılmadığını ya da herhangi bir hata yapıp yapmadığımı görmek istedim.Bu PHP OOP

Sayfa: 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; 
    } 
} 

Sayfa: İşte benim kodudur 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>'; 
    } 
} 

bu kurulum için uygun yolu PHP ve veritabanı bağlantısı için nesne yönelimli programlama mı? Eğer yapmazsan, yanlış yaptığımı açıklayabilir misin?

+4

Açıkçası, hiç OOP ile ilgisi yoktur. Aslında bu sadece bir sınıfa sarılmış bir işlevdir. Sadece db_conn() –

+1

işlevini bırakarak sınıf bildirimini serbest bırakabilirsiniz, ancak OOP kodlamasını uygulamak daha iyi değil mi? Ve eğer böyle bir dersi kullanmamdan dolayı OOP'u düşünmez miydi? –

+4

OOP, sözdizimi değil, mimari hakkında daha fazladır. Çok sayıda dersi olan bir kod yazabilirsiniz, ancak prosedür olarak kalacaktır. –

cevap

1

DatabaseFunctions.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

Bu kod, OOP için daha fazla aldırmazsa, teşekkür etmiyor musunuz? Eğer öyleyse bana nasıl ya da neden olduğunu söyleyebilir misin? –

+0

Evet, o sınıfta biraz daha fazla değişiklik yapabiliriz. Örnek işlevini statik yapabilmemiz için Veritabanı sınıfı nesnesi oluşturmamaya ihtiyacımız var. –

+0

En iyi uygulama, CamelCase'de Sınıf adlarını kullanmak ve pascalCase'deki islev isimlerini kullanmak. Cevabımı uygun şekilde güncellememe izin verin. –