رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
از try و catch چه جوری استفاده کنم تو شی گرایی؟
#1
سلام من سر این موضوع خیلی گیرم
یعنی من در هر قسمت از برنامه ام که با دیتا بیس کار دارم مثل select و update و .... باید از try catch استفاده کنم؟
این جوری که کد زنی برای اتصال به دیتا بیس و کار باهاش خیلی حجم کدها رو حجیم می کنه..!

 public function register($uname,$umail,$upass)
{
try
{
$new_password = password_hash($upass, PASSWORD_DEFAULT);

$stmt = $this->conn->prepare("INSERT INTO users(user_name,user_email,user_pass) 
                                              VALUES(:uname, :umail, :upass)");
 
$stmt->bindparam(":uname", $uname);
$stmt->bindparam(":umail", $umail);
$stmt->bindparam(":upass", $new_password);  

$stmt->execute(); 

return $stmt; 
}
catch(PDOException $e)
{
echo $e->getMessage();
} 
}

اگه امکان داره نمونه کد هاتون رو بگذارید تا من ببینم شما چه جوری استفاده می کنید
ممنون
پاسخ
تشکر شده توسط:
#2
مهم حجیم‌شدن کدها نیست. چیزی که اهمیت داره، اجرای بدون خطای برنامه است. البته من خودم شخصاٌ اینطوری کار میکنم که یه کلاس دیتابیس دارم و توی اون متدی برای اجرای کوئری دستی میگذارم و اونجا اینکارها رو انجام میدم. برای مثال:
class DB
{
    // other methods such as constructor, connection, etc.
    public function runQuery($query, $params)
    {
        try {
            $stmt = $this->conn->prepare($query);
            foreach($params as $key => $value) {
                $stmt->bindparam($key, $value);
            }
            $stmt->execute();
            return $stmt;
        } catch (PDOException $e) {
            return false;
        }
    }
}

حالا فرضاً توی متد register خودتون اینطوری کار میکنید:
class YourClass
{
    private $db;

    public function __construct()
    {
        $this->db = new DB();
    }

    public function register($uname,$umail,$upass)
    {
        $newPassword = password_hash($upass, PASSWORD_DEFAULT);
        $query = "INSERT INTO users(user_name,user_email,user_pass) VALUES(:uname, :umail, :upass)";
        $params = [
            ':uname' => $uname,
            ':umail' => $umail,
            ':upass' => $newPassword,
        ];
        return $this->db->runQuery($query, $params);
    }
    // rest of your class
}
پاسخ
تشکر شده توسط: ali2712022
#3
سلام مجدد وتشکر بابت پاسخ
تو کد اول که شما نوشتید یعنی :

class DB
{
   // other methods such as constructor, connection, etc.
   public function runQuery($query, $params)
   {
       try {
           $stmt = $this->conn->prepare($query);
           foreach($params as $key => $value) {
               $stmt->bindparam($key, $value);
           }
           $stmt->execute();
           return $stmt;
       } catch (PDOException $e) {
           return false;
       }
   }
}
آیا نباید کد های
$stmt->execute();

            return $stmt;
داخل آکولاد try   باشن?   آخه تا execute نکنه که کدی اجرا نمیشه که بخواد خطا برگردونه
پاسخ
تشکر شده توسط:
#4
مگه نیستن؟ اگه خوب دقت کنید متوجه میشین که آکولاد try داره توی خط catch بسته میشه. اینها استانداردهای کدنویسی PSR هستند.
پاسخ
تشکر شده توسط: ali2712022
#5
استاد واقعا متشکر بابت راهنماییتون
یه سوال دیگه هم داشتم که گفتم دیگه تاپیک جدید نزنم
می خواستم ببینم شما از متد ها و پروپرتی های استاتیک در کجاهای کد هاتون استفاده می کنید؟آخه من مبتدی هستم و نمی دونم باید در کجا ها از استاتیک استفاده کرد و در کل پروژه از متد ها و پروپرتی ها استاتیک استفاده نمی کنم که به نظرم این کار اشتباهه
اگه میشه یه نومنه مثال از کد هم قرار بدید(مثلا اگه پروژم یه وبلاگ ساده باشه کجاش استفاده کنم)
ممنون
پاسخ
تشکر شده توسط:
#6
بطور کلی هروقت نیازی به ایجاد یک شئ برای انجام یک کار خاص نباشه، از متدهای استاتیک استفاده میشه و هروقت بخوایم یک خصوصیت رو بین تمام اشیاء متعلق به یک کلاس به اشتراک بگذاریم، از فیلدهای استاتیک استفاده میکنیم. برای مثال:
class Math
{
    public static $PI = 3.1415926535;
    // or const PI = 3.1415926535;

    public static function power($a, $b)
    {
        $result = 1;
        for ($i = 0; $i < $b; $i++) {
            $result *= $a;
        }
        return $result;
    }
}

فیلدها و متدهای غیراستاتیک، خصوصیات و رفتارهای یک شئ رو مشخص میکنن و هروقت موجودیت خاصی درقالب یک شئ منحصربفرد وجود نداشته باشه، از فیلدها و متدهای استاتیک استفاده میکنیم.
پاسخ
تشکر شده توسط: ali2712022 , reza7z




کاربران در حال بازدید این موضوع: 2 مهمان