-1

طريقة استخدام كائن من كلاس داخل دالة داخل كلاس؟

السلام عليكم ورحمة الله وبركاته

انا بستخدم SQLite3 بقوم بانشاء كائن منها يحمل العنوان بتاع ملف قاعدة البيانات عندما استخدمه داخل دالة لا يعمل

وقومت باستخدام Global معه ايضاً لكن فى وجود كود عادى ليس كلاس او دالة يعمل طبيعى

  • ما هى طرق استخدام كائن داخل كلاس او دالة

  • قومت بعمل كلاس فى ملف اخر وتوريثه الى الملف المراد استخدام فيه sqlite ولكن لا يرى الدوال الداخلية له


*class dbclass{

public $sqldb;
public function __construct(){
    $this->sqldb = new SQLite3('db.db');
}
public function dbinsert($insert){
    return $this->sqldb->exec($insert);
}

} $a = new dbclass(); $te = $a->dbinsert("INSERT INTO send(id,phone,type,send,date) VALUES (NULL,'222233344','text',0,'1/1/1')"); if($te){ echo 'inserted';

}else{echo ' Dont Inserted';}*

هذا الكوك مثلاً بدون تعقيده امر الادخال لا ينفذ

وعندما اضع الامر مباشرة داخل sqlite ينفذ خارج php

  • اعتقد حل هذه المشكلة ستحل المشكلة الاخرى

class dbclass{

public $sqldb;
public function __construct(){
    $this->sqldb = new SQLite3('db.db');
}
public function dbinsert($insert){
    return $this->sqldb->exec($insert);
}

} $a = new dbclass(); $te = $a->dbinsert("INSERT INTO send(id,phone,type,send,date) VALUES (NULL,'222233344','text',0,'1/1/1')"); if($te){ echo 'inserted';

}else{echo ' Dont Inserted';}

  • ما المشكلة الكود يعمل بشكل جيد ؟

    class dbclass
    {
        public $sqldb;
    
        public function __construct()
        {
            $this->sqldb = new SQLite3('db.db');
        }
    
        public function dbinsert($insert)
        {
            return $this->sqldb->exec($insert);
        }
    } 
    
    $a = new dbclass(); 
    $te = $a->dbinsert("INSERT INTO send (id, phone, type, send, date) VALUES (NULL,'222233344','text',0,'1/1/1')");
    
    if($te){ 
        echo 'inserted';
    }else{
        echo ' Dont Inserted';
    }
    

يعمل بشكل جيد ولكن عند استخدامه داخل كلاس اخر لا يعمل

بمعنى اجى اورث الكلاس ده واستدعى دالة dbinsert لم يعمل

  • وهذا كود لإستخدام دوال الفئة عبر الوراثة:

    class dbclass
    {
        public $sqldb;
    
        public function __construct()
        {
            $this->sqldb = new SQLite3('db.db');
        }
    
        public function dbinsert($insert)
        {
            return $this->sqldb->exec($insert);
        }
    } 
    
    class newClass extends dbclass
    {
        public function __construct()
        {
            parent::__construct();
        }
    
        public function run()
        {
            $te = $this->dbinsert("INSERT INTO send (id, phone, type, send, date) VALUES (NULL,'222233344','text',0,'1/1/1')");
    
            if($te){ 
                echo 'inserted';
            }else{
                echo ' Dont Inserted';
            }
        }
    }
    
    $obj = new newClass();
    $obj->run();
    

الاكلاس الاول فى ملف لوحدة قمت باستدعاءه عن طريق require وبعدين ورثته جربها كده

  • لا يهم إن كان في ملف أو في نفس الصفحة في كلتا الحالتين الكود واحد، وضع الفئات في ملفات منفصلة ما هو إلا عملية تنظيم للأكواد وإستهلاك الموارد فقط ليس إلا.

تعبتك معلشى -- اعتقد ان فى مشكلة تانية لو هى شغاله عندك علشان لما باجى استدعى الدالة فى دالة داخل الكلاس لا تعمل غداً هجربها

  • وهذا نفس الكود داخل دالة ضمن فئة جديدة:

    class dbclass
    {
        public $sqldb;
    
        public function __construct()
        {
            $this->sqldb = new SQLite3('db.db');
        }
    
        public function dbinsert($insert)
        {
            return $this->sqldb->exec($insert);
        }
    } 
    
    class newClass
    {
        public function __construct(){}
    
        public function run()
        {
            $a = new dbclass(); 
            $te = $a->dbinsert("INSERT INTO send (id, phone, type, send, date) VALUES (NULL,'222233344','text',0,'1/1/1')");
    
            if($te){ 
                echo 'inserted';
            }else{
                echo ' Dont Inserted';
            }
        }
    }
    
    $obj = new newClass();
    $obj->run();
    

واذا كان الكلاس الأول الى اسمه dbclass فى ملف لوحده؟

  • انا قمت بتوريثه ولكنه لم يقم بالادخال!
  • عليك إستدعات باني الفئة الـ dbclass من خلال الكلمة المحجوزة parent داخل باني الفئة الوارثة للفئة dbclass كالتالي:

    parent::__construct();
    

والمثال كامل في الرد:

الكود لا يظهر بشكل افضل من هذا