سؤال

هل من الممكن تمرير كائن إلى مُنشئ فئة PHP ، وتعيين هذا الكائن كمتغير عالمي يمكن استخدامه من قبل بقية الوظائف في الفصل؟

فمثلا:

class test {

   function __construct($arg1, $arg2, $arg3) {
      global $DB, $ode, $sel;

      $DB = arg1;
      $ode = arg2;
      $sel = $arg3;
   }

   function query(){
      $DB->query(...);
   }

}

عندما أحاول القيام بذلك ، أحصل على خطأ "استدعاء إلى وظيفة عضو على غير كائن". هل هناك أي طريقة للقيام بذلك؟ خلاف ذلك ، لا بد لي من تمرير الكائنات إلى كل وظيفة فردية مباشرة.

شكرًا!

هل كانت مفيدة؟

المحلول

ربما تريد تعيينها للقيم على $this.

في مُنشرك ، ستفعل:

$this->DB = $arg1;

ثم في وظيفة الاستعلام الخاصة بك:

$this->DB->query(...);

يجب أن يتم ذلك بالمثل مع الحجج الأخرى إلى مُنشرك.

$this في سياق المثيل هو كيفية الرجوع إلى المثيل الحالي. هناك أيضًا كلمات رئيسية parent:: و self:: للوصول إلى أعضاء الطبقة الفائقة والأعضاء الثابتة في الفصل ، على التوالي.

نصائح أخرى

كملاحظة جانبية...
حتى يعتقد أن هذا ليس كذلك مطلوب, ، يعتبر بشكل عام أفضل يعلن المتغيرات الأعضاء داخل الفصل. يمنحك سيطرة أفضل عليها:

<?php
class test {
    // Declaring the variables.
    // (Or "members", as they are known in OOP terms)
    private $DB;
    protected $ode;
    public $sel;

    function __construct($arg1, $arg2, $arg3) {
      $this->DB = arg1;
      $this->ode = arg2;
      $this->sel = $arg3;
    }

    function query(){
      $this->DB->query(...);
    }
}
?>

نرى PHP: الرؤية للحصول على تفاصيل حول الفرق بين private, protected و public.

يمكنك القيام بذلك بسهولة تامة عن طريق تخزين الوسيطة كخاصية للكائن:

function __construct($arg1, $arg2, $arg3) {
   $this->db = arg1;
}

function f()
{
  $this->db->query(...);
}

لنفترض أن لديك كائن DB

$db = new db();

وكائن آخر:

$object = new object($db);

class object{

    //passing $db to constructor
    function object($db){

       //assign it to $this
       $this-db = $db;

    }

     //using it later
    function somefunction(){

        $sql = "SELECT * FROM table";

        $this->db->query($sql);

    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top