PDA

View Full Version : سوال: نظر در مورد کلاس ثبت کاربر



S.Malekzadeh
شنبه 31 مرداد 1388, 18:41 عصر
با سلام.

دوستان این اولین کلاس من هستش.
این کلاس برای ثبت اطلاعات یک کاربر در دیتابیس هستش.
فرض کنید که قبل از ساختن یک شی از این کلاس، به دیتابیس وصل شده ایم.
ممکنه که یک نظر روش بدید تا من ببینم که دارم کار رو درست انجام میدم یا نه و ادامه بدم کار رو؟
در واقع میخوام بدونم که آیا دارم مفاهیم شی گرایی رو درست پیاده میکنم یا نه؟



<?php

class Register
{

private $uName;
private $pass;
private $cpass;
private $mpass;
private $email;
private $regTime;
private $membersTable;

public function GetUserData($uName, $pass, $cpass, $email, $regTime)
{
$this->uName = $uName;
$this->pass = $pass;
$this->cpass = $cpass;
$this->email = $email;
$this->regTime = $regTime;
}

public function CheckEntries()
{
if(empty($this->uName))
{
return(false);
}

if(empty($this->pass))
{
return((false));
}

if(empty($this->email))
{
return((false));
}

return(true);
}

public function CheckPassword()
{
if($this->pass != $this->cpass)
{
return(false);
}

return(true);
}

public function GetMembersTable($membersTable)
{
$this->membersTable = $membersTable;
}

public function CheckUserExists()
{
$sql = "SELECT uname FROM ". $this->membersTable ." where uname ='$this->uName'";
$result = mysql_query($sql);

if (mysql_numrows($result) > 0) {
return(true);
}

return(false);
}

private function HashPassword()
{
$this->mpass = md5($this->pass);
}

private function SetRegTime()
{
$this->regTime = time();
}

public function AddMember()
{
$sql = "INSERT INTO ". $this->membersTable ." (uname, pass, email, regtime) VALUES ('$this->uName', '$this->mpass', '$this->email', '$this->regTime')";
$result = mysql_query($sql);

if(!$result)
{
return(false);
}

return(true);
}
}

?>


بسیار ممنونم از کمکتون.

Yousha
شنبه 31 مرداد 1388, 20:58 عصر
سلام،
برای استفاده از همچین توابعی نیاز به ساخت شی نیست. میتونید از خود کلاس(کپسوله سازی) استفاده کنید.
توابع را static کنید و بجای $this-> از self/parent استفاده کنید.
:)

S.Malekzadeh
شنبه 31 مرداد 1388, 21:28 عصر
با سلام.
خیلی ممنونم.

فقط با عرض شرمندگی، متوجه نشدم این رو:

برای استفاده از همچین توابعی نیاز به ساخت شی نیست. میتونید از خود کلاس(کپسوله سازی) استفاده کنید.

و دیگری اینکه چرا باید از توابع static استفاده کنم؟ به دلیل سرعت بیشتر؟ و اینکه آیا استفاده از توابع static، برنامه نویسی شی گرا رو شبیه برنامه نویسی رویه ای نمیکنه؟

ممنون.

Yousha
یک شنبه 01 شهریور 1388, 10:42 صبح
و دیگری اینکه چرا باید از توابع static استفاده کنم؟ به دلیل سرعت بیشتر؟ و اینکه آیا استفاده از توابع static، برنامه نویسی شی گرا رو شبیه برنامه نویسی رویه ای نمیکنه

بله، و اینکه بدون نیاز به ساخت شی کلاس هم قابل دسترسی هستند.

من کلاستون رو کمی بهینه سازی کردم. از این استفاده کنید:


<?php
final class Register
{
private $uName, $pass, $cpass, $mpass, $email;
private $regTime, $membersTable;

final public function Register($uName, $pass, $cpass, $email, $regTime)
{
$this->uName= &$uName;
$this->pass= &$pass;
$this->cpass= &$cpass;
$this->email= &$email;
$this->regTime= &$regTime;
unset($uName, $pass, $cpass, $email, $regTime);
}

final public function CheckEntries()
{
return((empty($this->uName) || empty($this->pass) || empty($this->email)) ? false : true);
}

final public function CheckPassword()
{
return(($this->pass != $this->cpass) ? false : true);
}

final public function GetMembersTable($membersTable)
{
$this->membersTable= &$membersTable;
unset($membersTable);
}

final public function CheckUserExists()
{
$result= &mysql_query("SELECT uname FROM " . $this->membersTable . " where uname= '$this->uName';");
return((mysql_numrows($result) > 0) ? true : false);
}

final public function AddMember()
{
$result= mysql_query("INSERT INTO " . $this->membersTable . " (uname, pass, email, regtime) VALUES('$this->uName', '$this->mpass', '$this->email', '$this->regTime');");
return(!$result ? false : true);
}

final private function _HashPassword()
{
$this->mpass= &md5(&$this->pass);
}

final private function _SetRegTime()
{
$this->regTime= &time();
}

final public function __destruct()
{
unset($this->uName, $this->pass, $this->cpass, $this->mpass, $this->email, $this->regTime, $this->membersTable);
}
};
?>

$objRegister= new Register('usrnme', 'paswd', 'paswd', 'eml', '22.22.22');

S.Malekzadeh
یک شنبه 01 شهریور 1388, 12:03 عصر
:لبخند:

آقا شدیدا دست شما درد نکنه.
خیلی لطف کردید.