Özellikle PHP Soyut sınıf 'n Arabirimi,

2 Cevap php

Bu soru yer benim önceki mesaja devamında olan here.

Orijinal yazı düzenleme olmadan tekrar kod örneğini göndermek için hiçbir yolu olmadığından, ben yeni bir yazı başlıyorum. Ve ayrıca, bu PHP kodu içeren.

Ben, iki sınıfları yazmaya ilk açılması ve veritabanına bağlantıyı kapatmadan ve ikinci DB erişim için çeşitli işlevleri yeniden sağlamaktır duyuyorum.

Aşağıda Bağlantı sınıf için benim PHP kodu:

<?php
/**
* DBConnection Base Class Definition
*/

/* Include dependency */
require_once("\config\dbconfig.php");

abstract class dbconnection 
{
 var $conn;
 //Opens connection for a MySQL DB
 abstract function OpenConnection()
 {
  $conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) 
     or die($this->ShowError(mysql_error()));
  mysql_select_db(DB_NAME) or die ($this->ShowError("Connection to MySQL Database Failed. "));  
 }

 //Closes connection for a MySQL DB
 abstract function CloseConnection()
 {
  try
  {
   mysql_close($conn);
  }
  catch(exception $ex)
  {
   $this->ShowError($ex);
  }
 }

 protected function ShowError($err)
 {
  echo "<script>alert('Error: ' +". $err .");</script>"; 
 }  
}
?>

Yukarıdaki kodu dahil dosya aşağıdaki kodu içerir:

<?php
//Modify constants with data needed to access your own database
define('DB_HOST','localhost:3306');
define('DB_NAME','MyStore');
define('DB_USER','super');
define('DB_PASSWORD','****');
?>

Şimdi burada (önceki yazıma devam) soyut sınıf ve arayüzler ile ilgili benim sorgular şunlardır:

(1) Can a connection class be abstract? Are the methods written correctly?
(2) Instead of making the second code a file "dbconfig.php", will it be good to make an Interface for it?

2 Cevap

Ben soyut olarak bu yöntemi işaretlemek için bir neden görmüyorum. Bu mümkündür, ama ne amaçla? Soyut beyan eğer yöntemleri vücudun olmadan tanımlanmış olmalıdır. Eğer bir arayüzü tanımlayan ve bunu uygulama ile daha iyi olduğundan daha bağlayan bir yol zorlamak istiyorum.

I't bu şekilde sabitler olarak db yapılandırmaları tanımlamak için akıllı değildir. Muhtemelen bir parametre olarak vererek daha iyi olacak. Örneğin birden fazla db ile bağlantı daha esnek olduğu şekilde.

(1a) evet

(1b) öyle görünüyor. Ancak exceptions kullanın lütfen OOP'deki die kullanmamalısınız.

(2) Genel olarak bir arabirim kullanmak daha cepten tarzı olabilir. Bu durumda PHP için bu sabitleri kullanmak tamamen ok. Ama bu güçlü özneldir.