تمرير الكائنات إلى خطأ مُنشئ PHP
-
21-09-2019 - |
سؤال
هل من الممكن تمرير كائن إلى مُنشئ فئة 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);
}
}