PDA

View Full Version : مشکل در فهمیدن یک کد ؟



redhat2
دوشنبه 25 دی 1391, 11:02 صبح
سلام به دوستان ، من یه مشکلی توی این کد میبینم ،

function fetchAllUsers()
{
global $mysqli,$db_table_prefix;
$stmt = $mysqli->prepare("SELECT
id,
user_name,
display_name,
password,
email,
activation_token,
last_activation_request,
lost_password_request,
active,
title,
sign_up_stamp,
last_sign_in_stamp
FROM ".$db_table_prefix."users");
$stmt->execute();
$stmt->bind_result($id, $user, $display, $password, $email, $token, $activationRequest, $passwordRequest, $active, $title, $signUp, $signIn);

while ($stmt->fetch()){
$row[] = array('id' => $id, 'user_name' => $user, 'display_name' => $display, 'password' => $password, 'email' => $email, 'activation_token' => $token, 'last_activation_request' => $activationRequest, 'lost_password_request' => $passwordRequest, 'active' => $active, 'title' => $title, 'sign_up_stamp' => $signUp, 'last_sign_in_stamp' => $signIn);
}
$stmt->close();
return ($row);
}

این function زیرمجموعه از یک کلاس هستش ، طرف اومده و global $mysqli,$db_table_prefix و توی هر تابعش اینها دیده میشه ، چه فرقی داره بین اینکه ما اینا را در اول کلاس به صورت private تعریف کنیم با اینکه بیایم و مثل همین طرف ، اینها را به صورت Global تعریف کنیم . یه سوال دیگه هم داشتم :
به نظر شما این کد منطقی هست :

<?php
class functionClass
{
private $_dblocal = "localhost";
private $_dbuser = "root";
private $_pass = "";
private $_dbname = "meSaeed";
private $_dbtable;
private $_dbsql;
protected $_username;
//
function __construct()
{
$config = mysql_connect($this->_dblocal,$this->_dbuser,$this->_pass) or mysql_error();
mysql_select_db($this->_dbname,$config) or mysql_error();
}
function SetTable($dbtable)
{
$this->_dbtable = $dbtable;
return $this->_dbtable;
}
//User's Function ...
function existUsername($username)
{
global $mysql;
self::SetTable("login");
$this->_username = $username;
$this->_dbsql = "SELECT * FROM ".$this->_dbtable." WHERE username = '".$this->_username."'";
$mysql = mysql_query($this->_dbsql);
if(mysql_num_rows($mysql) == 1)
{
return true;
}
else
{
return false;
}
}
}
?>
یعنی بهتر از این هم میشه نوشت ، منظور درباره ی این هست که بیایم یه تابع تغریف کنیم به نام settable و این تابع را در هر تابعی که خواستیم self کنیم ، یعنی منطی هست و چیزه بهتر از این هم وجود داره ؟

Mr.Moghadam
دوشنبه 25 دی 1391, 11:34 صبح
در مورد سوال اولت باید بگم که استفاده از global معمولا در برنامه نویسی تابعی یا functional کاربرد داره برای برنامه نویسی به صورت شیء گرا بهتره که از property ها یا همون متغیر های داخل کلاس استفاده کنیم.
سوال دومت رو درست متوجه نشدم.اما این کلاسی که گذاشتی ایراد زیاد داره.اول اینکه همینطور که قبلا گفتم استفاده از global در برنامه نویسی شیء گرا کاربردی نداره.دوم اینکه بهتره که در تابع سازنده به dbtable مقدار دهی کنیم.یا اگر تعداد متغیرها زیاد بود از توابع جادویی __set و __get و __call (http://phpro.ir/%d9%85%d8%aa%d8%af%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d8%af%d8%b1-php/)استفاده کنیم.
اگر میخوای شیء گرا برنامه نویسی کنی از همه امکاناتش استفاده کن.سک مثال میزنم برات :

فرض کن یه کلاس داری که اعمال اصلی رو توی دیتابیس انجام میده :

class db
{
function __construct(){}

function insert(){}

function delete(){}

function edit(){}

function selecet(){}


}

خب حالا باید برای هر کدوم از جداول توی دیتابیس یک کلاس بسازی که از کلاس db ارث بری کنه :

class News extends db
{

}
برای راحتی کار و خوانایی بیشتر اسم کلاست رو همنام اسم جدولت بذار.
حالا وقتی از کلاس News یک شیء میسازی به تمام متدها public کلاس db دسترسی داری.که میتونی ازشون استفاده کنی.اما باید نام جدول رو هم به کلاس db ارسال کنی. پس کار زیر رو میکنیم :


class db{

private $table;

function __construct()
{

$this->table = get_class($this);
}
}

با اینکار نام کلاس فرزند رو میگیره و در متغیر $table میریزه
نمیدونم چوابت رو گرفتی یا زدم تو خاکی :D

redhat2
دوشنبه 25 دی 1391, 13:30 عصر
در مورد سوال اولت باید بگم که استفاده از global معمولا در برنامه نویسی تابعی یا functional کاربرد داره برای برنامه نویسی به صورت شیء گرا بهتره که از property ها یا همون متغیر های داخل کلاس استفاده کنیم.
سوال دومت رو درست متوجه نشدم.اما این کلاسی که گذاشتی ایراد زیاد داره.اول اینکه همینطور که قبلا گفتم استفاده از global در برنامه نویسی شیء گرا کاربردی نداره.دوم اینکه بهتره که در تابع سازنده به dbtable مقدار دهی کنیم.یا اگر تعداد متغیرها زیاد بود از توابع جادویی __set و __get و __call (http://phpro.ir/%d9%85%d8%aa%d8%af%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d8%af%d8%b1-php/)استفاده کنیم.
اگر میخوای شیء گرا برنامه نویسی کنی از همه امکاناتش استفاده کن.سک مثال میزنم برات :

فرض کن یه کلاس داری که اعمال اصلی رو توی دیتابیس انجام میده :

class db
{
function __construct(){}

function insert(){}

function delete(){}

function edit(){}

function selecet(){}


}

خب حالا باید برای هر کدوم از جداول توی دیتابیس یک کلاس بسازی که از کلاس db ارث بری کنه :

class News extends db
{

}
برای راحتی کار و خوانایی بیشتر اسم کلاست رو همنام اسم جدولت بذار.
حالا وقتی از کلاس News یک شیء میسازی به تمام متدها public کلاس db دسترسی داری.که میتونی ازشون استفاده کنی.اما باید نام جدول رو هم به کلاس db ارسال کنی. پس کار زیر رو میکنیم :


class db{

private $table;

function __construct()
{

$this->table = get_class($this);
}
}

با اینکار نام کلاس فرزند رو میگیره و در متغیر $table میریزه
نمیدونم چوابت رو گرفتی یا زدم تو خاکی :D
ممنون ولی این آخری رو نفهمیدم منظورم کلاس آخری بود .؟؟؟