2013-11-27 3 views
-1

Итак, у меня есть какой-то глупый вопрос, я видел проблемы и разные вещи при создании CMS, и я хочу сделать CMS OOP, и мне было интересно, может ли кто-нибудь объяснить мне, в чем разница между использованием один из двух примеров?Различные способы создания функции Connect в классе?

Пример 1 -

class myClass 
{ 
     var $username; 
     var $password; 

     public function connect() 
     { 
      try { 
       $pdo = new PDO('mysql:host=localhost;dbname=dbname', $this->username, 
        $this->password); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       return $pdo; 
      } catch(PDOException $e) { 
       echo 'Error: ' . $e->getMessage(); 
      } 
     } 
} 
// Then to call that function 
$obj = new myClass(); 
$obj->username = "root"; 
$obj->password = "password"; 
$pdo = $obj->connect(); 
// Then run my query down here 

Ex 2 -

class database 
{ 
     protected $connection = null; 
     //make a connection 
     public function __construct($hostname,$dbname,$username,$password) 
     { 
      try { 
       //MySQL with PDO_MYSQL 
       $this->connection = new PDO("mysql:host=$hostname;dbname=$dbname", 
        $username, $password); 
       $this->connection->setAttribute(PDO::ATTR_ERRMODE, 
        PDO::ERRMODE_EXCEPTION); 
      } catch (PDOException $e) { 
       $this->connection = null; 
       die($e->getMessage()); 
      } 
     } 
    } 

Или я даже видел, как люди используют __construct то отдельная функция подключения Так что же разница? Есть ли преимущество в производительности, делая это определенным образом? Или есть способ, который является более правильным, чем другой, или все три, если эти неправильные способы сделать это? Я не нашел надежного источника, чтобы найти ответ.

+0

Я не уверен в производительности, но я сделал бы это второй способ, поэтому у класса есть свое собственное соединение, и вам не нужно управлять им внешне, как в примере. –

ответ

1

Между ними нет заметных различий в производительности.

Второй способ предпочитают многие люди, потому что объект базы данных будет бесполезным, если он не пытался подключиться к базе данных. Поскольку попытка подключения к базе данных настолько важна для ценности/существования объекта, имеет смысл отправить детали соединения через конструктор, чтобы он мог попытаться подключиться, как только он будет создан. Таким образом, изменение:

$obj = new myClass(); 
$obj->username = "root"; 
$obj->password = "password"; 
$pdo = $obj->connect(); 

в

$obj = new myClass('localhost', 'root', 'mypassword'); 
+0

Хорошо, если я продолжу использовать второй пример, это приведет к тому, что весь класс будет иметь свое собственное соединение правильно? И каждый раз, когда этот класс запускается, он будет подключаться к db? В конечном счете, эта функция соединения будет частью класса CMS, который я планирую построить, так что это будет лучший вариант? – user2701687

2

Для большинства случаев 3 примера лучше:

В самом деле, ПДО уже класс базы данных. Таким образом, если у вас нет особых причин, чтобы создать еще один на вершине, PDO itelf просто идеально:

$pdo = new PDO('mysql:host=localhost;dbname=dbname', $username,$password); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

все, что вам действительно нужно.

Смежные вопросы