علی
6 سال پیش توسط علی مطرح شد
5 پاسخ

دسترسی به property از داخل متد استاتیک در کلاس

سلام خوب هستین
بنده دیروز یه تاپیک ایجاد کردم و لی متاسفانه امروز حذفش کردین بنده هم به پاسخ این سوال واقعا نیاز دارم اگه جواب نمیدین حداقل حذفش نکنین :
یه مشکلی برایم پیش آمده توی دسترسی به اتصال به دیتابیس با متد استاتیک کد ها رو میذارم :
<code>
<?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;
    }
    }
    </code>
    توی این کلاس بنده یک متد دارم برای ارتباط به دیتابیس که مقدار ش برگشت داده می شه و در متد بعدی getrow می خوام وصل بشم به یکی از جداول دیتابیس و رکوردها رو بخونم این متد رو می خوام به صورت استاتیک تعریف کردم چون قراره کار مشترکی رو انجام بده مشکل اصلی اینه که نمی تونم داخل این متد به متد اتصال به دیتابیس دسترسی داشته باشم چون این متد از نوع استاتیک هستش و همونطور که می بینین کامنتش کردم هر کاری هم کردم آخرش نتونستن دسترسی بگیرم به مقدار برگشتی متد connect() متغییر استاتیک ایجاد کردم و مقدارشو از مقدار برگشتی connect گرفتم ولی زمانی که در متد getrow فراخوانی کردم (self::prepertname)دوباره ارور داد و متد prepare اجرا نشد در حقیقت داخل این متد اصلا کانکشنی ست نمیشه لطفا راهنمایی کنین ...

کدها رو داخل `` و '' قرار دادم ولی درست نمایش داده نمیشه


ثبت پرسش جدید
madadi
@madadi 6 سال پیش مطرح شد
0

سلام کدهاتون رو توی سه تا ` قرار بدین ```

این پاسخ شما

<?php
    /**

    connection
     */
    class BaseModel{
        private $host;
        private $pass;
        private $user;
        private $dbname;

        public function __construct($host,$pass,$user,$dbname){
            $this->host = $host;
            $this->pass = $pass;
            $this->user = $user;
            $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 = self::connect()->prepare($query);
            if($response->execute()){
                $result = $response->fetchAll();
            }else{
                $result = false;
            }
            return $result;
        }

    }

علی
تخصص : طراح وب سایت , برنامه نویس php...
@sardar 6 سال پیش مطرح شد
0

سلام متاسفانه این ارور رو میده
Fatal error: Uncaught Error: Using $this when not in object context in
قبلا هم این روش رو تست کردم منتها خروجی رو داخل متغییر می ریختم و prepare رو با متغییر فراخوانی می کردم ارور میداد لان هم ارور میده در ضمن مقدار پیش فرض ورودی های متد سازنده کلاس رو دارم از ثابت های هاست , پسورد ,یوزرنیم و دبی نیم دریاافت می کنم


علی
تخصص : طراح وب سایت , برنامه نویس php...
@sardar 6 سال پیش آپدیت شد
0

الته با این روش جواب می گیرم ولی نمی دونم منطقی هست یا نه :


<?php
/**
 * basemodel for use connection all model
 */
class BaseModel{
    private $host;
    private $pass;
    private $user;
    private $dbname;

    public function __construct($host=HOST,$pass=PASSWORD,$user=USERNAME,$dbname=DBNAME){
        $this->host   = $host;
        $this->pass   = $pass;
        $this->user   = $user;
        $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;
    }
    protected function disconnect($conn){
        unset($conn);
    }

    public static function getOptionsAdmin(){
        //$conn = $this->connect();
        // منظورم ساخت شی از روی کلاس هستش در داخل متد
        $new = new BaseModel();
        $query = "SELECT * FROM `tbl_admin_options`";
        $response = $new->connect()->prepare($query);
        if($response->execute()){
            $result = $response->fetchAll();
        }else{
            $result = false;
            $this->disconnect($conn);
        }
        return $result;
    }
}
`

محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 6 سال پیش مطرح شد
0

زمانی از متدهای Static استفاده می کنید نمی تونید برای دسترسی به توابع دیگه یا مقادیر تعریف شده از $this استفاده کنید باید به صورت زیر عمل کنید.

self::$host;

علی
تخصص : طراح وب سایت , برنامه نویس php...
@sardar 6 سال پیش مطرح شد
0

بله اینو می دونم منتها اگه به کد نگاه کنید من یک تابع دارم که برای ارتباط با دیتابیس هستش که به صورت عادی تعریف شده و لی در متد استاتیک می خوام به مقداری که از تابع connect برمی گرده دسترسی داشته باشم لذا یک خاصیت تعریف کردم بصورت استاتیک و مقدارشو از connect گرفتم و به همین روشی که شما می گید داخل متد استاتیک فراخوانی کردم ولی باز خطا می داد الان نمی دونم این روشی که استفاده کردم درست هستش یا نه یعنی ساخت یک شی از کلاس در داخل متد استاتیک و دسترسی به connect برای استفاده


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام