Я работаю с упс в php.Является ли мой код достаточно хорош по соображениям безопасности, и я получаю проблему при закрытии соединения, используя функцию без класса для соединения pdo.Пожалуйста, посоветуйте мне улучшения в моем коде.
<?php
abstract class connect {
protected static $DB_HOST = 'localhost';
protected static $DB_USER = 'root';
protected static $DB_PASS = '';
protected static $DB_NAME = 'crm';
protected static $CONNECTION_TYPE = 'PDO';
abstract protected function connection_pdo();
abstract protected function connection_close_pdo($conn);
}
abstract class connection extends connect {
protected function connection_pdo(){
try{
$conn = new PDO("mysql:host=".static::$DB_HOST.";dbname=".static::$DB_NAME, static::$DB_USER, static::$DB_PASS);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//echo "Connected successfully";
return $conn;
}catch(PDOException $e){
return "Connection failed: " . $e->getMessage();
}
}
protected function connection_close_pdo($conn){
return $conn = null;
}
}
trait conn {
protected function conn(){
return $this->connection_pdo(); // for pdo only
}
}
trait close {
protected function close($conn){
return $this->connection_close_pdo($conn);
}
}
class user extends connection {
use conn, close;
protected function user_details (){
$stmt = $this->conn()->prepare("SELECT * FROM `users`");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$data = $stmt->fetchAll();
return $data;
}
}
class openUsers extends user{
public function ud(){
return $this->user_details();
}
}
$object = new openUsers();
var_dump($object->ud());
?>
У меня проблемы с пониманием абстрактного или интерфейса.Если я использую интерфейс как connect вместо абстрактного класса connect и я определю детали базы данных как константу, это будет хорошо для кода.