• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دسترسی به property از داخل متد استاتیک در کلاس
#1
سلام خسته نباشین دوستان یه مشکلی برایم پیش آمده توی دسترسی به اتصال به دیتابیس با متد استاتیک کد ها رو میذارم :
کد پی‌اچ‌پی:
<?php
/**
 * connection
 */
class BaseModel{
 
   private $host;
 
   private $password;
 
   private $username;
 
   private $dbname;

 
   public function __construct($host=HOST,$pass=PASSWORD,$user=USERNAME,$dbname=DBNAME){
 
       $this->host   $host;
 
       $this->pass   $password;
 
       $this->user   $username;
 
       $this->dbname $dbname;
 
   }

 
   protected function connect(){
 
       $conn = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8"
 
       ,$this->user
        
,$this->pass);
 
       $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 
       return $conn;
 
   }

 
   public static function getrow(){
 
       //$conn = $this->connect();
 
       $query "SELECT * FROM `item`";
 
       $response $conn->prepare($query);
 
       if($response->execute()){
 
           $result $response->fetchAll();
 
       }else{
 
           $result false;
 
       }
 
       return $result;
 
   }


توی انین کلاس بنده یک متد دارم برای ارتباط به دیتابیس که مقدار ش برگشت داده می شه و در متد بعدی getrow می خوام وصل بشم به یکی از جداول دیتابیس  و رکوردها رو بخونم این متد رو می خوام به صورت استاتیک تعریف کردم چون قراره کار مشترکی رو انجام بده مشکل اصلی اینه که نمی تونم داخل این متد به متد اتصال به دیتابیس دسترسی داشته باشم  چون این متد از نوع استاتیک هستش و همونطور که می بینین کامنتش کردم هر کاری هم کردم آخرش نتونستن دسترسی بگیرم به مقدار برگشتی متد connect() متغییر استاتیک ایجاد کردم و مقدارشو از مقدار برگشتی connect گرفتم ولی زمانی که در متد getrow فراخوانی کردم (self::prepertname)دوباره ارور داد و متد prepare اجرا نشد  در حقیقت داخل این متد اصلا کانکشنی ست نمیشه لطفا راهنمایی کنین ... Heart Heart Heart
  پاسخ
تشکر شده توسط :
#2
سلام
برای دیتابیس و کلاسهایی از این نو بهتر از الگوی singleton استفاده کنی
ولی در عین حال برای رفع این مشکل تو باید متغیر con رو هم بصورت استاتیک تعریف کنی



کد پی‌اچ‌پی:
<?php
/**
 * connection
 */
class BaseModel{
 
   private $host;
 
   private $password;
 
   private $username;
 
   private $dbname;
 
   private static $conn;

 
   public function __construct($host=HOST,$pass=PASSWORD,$user=USERNAME,$dbname=DBNAME){
 
       $this->host   $host;
 
       $this->pass   $password;
 
       $this->user   $username;
 
       $this->dbname $dbname;
 
       self::$conn $this->connect();
 
   }

 
   protected function connect(){
 
       $conn = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8"
 
           ,$this->user
            
,$this->pass);
 
       $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 
       return $conn;
 
   }

 
   public static function getrow(){
 
       $conn self::$conn;
 
       $query "SELECT * FROM `item`";
 
       $response $conn->prepare($query);
 
       if($response->execute()){
 
           $result $response->fetchAll();
 
       }else{
 
           $result false;
 
       }
 
       return $result;
 
   }

اگه کفشت پاتو می زد و از ترس قضاوت مردم پابرهنه نشدی و درد رو به پات تحمیل کردی دیگه در مورد آزادی شعار نده !
آلبر کامو
  پاسخ
تشکر شده توسط : ayoubsys


پرش به انجمن:


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