Mostafa_G2
شنبه 30 دی 1391, 13:32 عصر
سلام دوستان آقا من دارم پروژه دانشگاهیم رو شروع میکنم تا چند وقت دیگه تحویل بدم
همین اولش به مشکل برخوردم
راستش نمیدونم به صورت درست ( شی گرایی و ارث بری) کد مینویسم یا اینکه کد مشکل داره ( البته شاید کد نوشتنم یه مقدار خنده دار باشه چون حس میکنم یه چیزی که مصرفی نداره رو الکی نوشتم یا میتونستم یجوره دیگه بنویسم یا اصلا شاید معنی ارث بری رو درست متوجه نشد باشم, من الان گیج شدم و نمی دونم باید چه کنم)
به نظرتون من به جای کلاس database از interface استفاده کنم بهتره؟ اصلا چه جور توابعی ما باید تو interface یا تو این جور کلاس ها بنویسیم؟ توابعی که معمولا چندین کاربرد دارند و به چندین روش مختلف میشه نوشت و هر روش یه کاری انجام میده؟ مثل تابع makeSound که بسته به نوع آبجکتی که بهش ارسال میشه یه صدای متفاوت برمیگردونه.....یا اینکه هر جور توابعی میتوونیم بنویسیم؟
من فکر میکنم کدی که نوشتم به احتمال مشکل داره (ارور نمیده و ریزالت هم برمیگردونه, من فقط فکر میکنم که از لحاظ شیوه برنامه نویسی مورد داره) میخواستم من رو راهنمایی کنید و اصلاح شدش رو واسم بنویسید, ممنون میشم
database.class.php
<?php
class Database {
//protected functions
protected static function openConnection($returned) {}
//private functions
private function confirmQuery($result) {}
//public functions
public function getConnection() {}
public function closeConnection($conn, $stmt) {}
public function prepareQuery($db, $sql) {}
public function query($sql) {}
public function findAll() {}
public function findById() {}
}
conf.php
<?php
defined('DB_HOST') ? NULL : define("DB_HOST", 'localhost');
defined('DB_USER') ? NULL : define("DB_USER", 'test_user');
defined('DB_PASS') ? NULL : define("DB_PASS", 'Bqedp5CKbHN3zzEK');
defined('DB_NAME') ? NULL : define("DB_NAME", 'test_db');
MySQLDatabase.class.php
<?php
require('Database.class.php');
require('conf.php');
class MySQLDatabase extends Database {
function __construct() {
$this->openConnection(false);
}
protected static function openConnection($returned) {
if($returned) {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno())
die('Connection failed becuse ' . $this->mysqli->error);
return $mysqli;
} else {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno())
die('Connection failed becuse ' . $this->mysqli->error);
}
}
public function closeConnection($conn, $stmt) {
if(isset($stmt)) {
$stmt->free_result();
unset($stmt);
}
if(isset($conn)) {
$conn->close();
unset($conn);
}
}
public function getConnection() {
return self::openConnection(true);
}
public function prepareQuery($db, $sql) {
if(!$stmt = $db->prepare($sql))
die('Query faield beacuse blow issue:<br /><ul><li>' . $db->error . '</li></ul>');
return $stmt;
}
}
functions.php
<?php
require_once('includes/MySQLDatabase.class.php');
require_once('Database.class.php');
function openConnection($obj) {
if($obj instanceof Database) {
return $obj->getConnection();
} else {
echo 'Error: Passed wrong kind of object';
}
echo "<br />";
}
index.php
<?php
require_once('includes/MySQLDatabase.class.php');
require_once('includes/functions.php');
$db = new MySQLDatabase();
$conn = openConnection($db);
$stmt = $db->prepareQuery($conn, 'SELECT id, username FROM membership');
$stmt->execute();
$stmt->bind_result($id, $username);
while ($stmt->fetch()) {
echo $id;
echo $username;
}
$db->closeConnection($conn, $stmt);
همین اولش به مشکل برخوردم
راستش نمیدونم به صورت درست ( شی گرایی و ارث بری) کد مینویسم یا اینکه کد مشکل داره ( البته شاید کد نوشتنم یه مقدار خنده دار باشه چون حس میکنم یه چیزی که مصرفی نداره رو الکی نوشتم یا میتونستم یجوره دیگه بنویسم یا اصلا شاید معنی ارث بری رو درست متوجه نشد باشم, من الان گیج شدم و نمی دونم باید چه کنم)
به نظرتون من به جای کلاس database از interface استفاده کنم بهتره؟ اصلا چه جور توابعی ما باید تو interface یا تو این جور کلاس ها بنویسیم؟ توابعی که معمولا چندین کاربرد دارند و به چندین روش مختلف میشه نوشت و هر روش یه کاری انجام میده؟ مثل تابع makeSound که بسته به نوع آبجکتی که بهش ارسال میشه یه صدای متفاوت برمیگردونه.....یا اینکه هر جور توابعی میتوونیم بنویسیم؟
من فکر میکنم کدی که نوشتم به احتمال مشکل داره (ارور نمیده و ریزالت هم برمیگردونه, من فقط فکر میکنم که از لحاظ شیوه برنامه نویسی مورد داره) میخواستم من رو راهنمایی کنید و اصلاح شدش رو واسم بنویسید, ممنون میشم
database.class.php
<?php
class Database {
//protected functions
protected static function openConnection($returned) {}
//private functions
private function confirmQuery($result) {}
//public functions
public function getConnection() {}
public function closeConnection($conn, $stmt) {}
public function prepareQuery($db, $sql) {}
public function query($sql) {}
public function findAll() {}
public function findById() {}
}
conf.php
<?php
defined('DB_HOST') ? NULL : define("DB_HOST", 'localhost');
defined('DB_USER') ? NULL : define("DB_USER", 'test_user');
defined('DB_PASS') ? NULL : define("DB_PASS", 'Bqedp5CKbHN3zzEK');
defined('DB_NAME') ? NULL : define("DB_NAME", 'test_db');
MySQLDatabase.class.php
<?php
require('Database.class.php');
require('conf.php');
class MySQLDatabase extends Database {
function __construct() {
$this->openConnection(false);
}
protected static function openConnection($returned) {
if($returned) {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno())
die('Connection failed becuse ' . $this->mysqli->error);
return $mysqli;
} else {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno())
die('Connection failed becuse ' . $this->mysqli->error);
}
}
public function closeConnection($conn, $stmt) {
if(isset($stmt)) {
$stmt->free_result();
unset($stmt);
}
if(isset($conn)) {
$conn->close();
unset($conn);
}
}
public function getConnection() {
return self::openConnection(true);
}
public function prepareQuery($db, $sql) {
if(!$stmt = $db->prepare($sql))
die('Query faield beacuse blow issue:<br /><ul><li>' . $db->error . '</li></ul>');
return $stmt;
}
}
functions.php
<?php
require_once('includes/MySQLDatabase.class.php');
require_once('Database.class.php');
function openConnection($obj) {
if($obj instanceof Database) {
return $obj->getConnection();
} else {
echo 'Error: Passed wrong kind of object';
}
echo "<br />";
}
index.php
<?php
require_once('includes/MySQLDatabase.class.php');
require_once('includes/functions.php');
$db = new MySQLDatabase();
$conn = openConnection($db);
$stmt = $db->prepareQuery($conn, 'SELECT id, username FROM membership');
$stmt->execute();
$stmt->bind_result($id, $username);
while ($stmt->fetch()) {
echo $id;
echo $username;
}
$db->closeConnection($conn, $stmt);