هل يمكن تعريف المتغيرات العامة الافتراضية للفئة ديناميكيًا من مصفوفة في PHP؟

StackOverflow https://stackoverflow.com//questions/12717399

سؤال

لدي فئة حدث أستخدمها لإدراج/تحديث البيانات في قاعدة البيانات الخاصة بي.هل هناك طريقة يمكنني من خلالها إنشاء المتغيرات العامة من مجموعة db_fields الخاصة بي حتى لا أضطر إلى تكرار البيانات؟

هذا هو هيكلي الحالي الذي يعمل ...

class event{
    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    public $field1;
    public $field2;
    public $field3;
    public $field4;
    public $field5;
}

أود أن أحصل على شيء مثل هذا..

class event{
    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    function __construct() {
        create_public_vars_here($db_fields);
    }

}

شكرًا!

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

المحلول

يمكنك تجربة ما يلي:

giveacodicetagpre.

نصائح أخرى

يمكنك استخدام المستوطنين / المستلمين السحريين:

class event{

    protected static $table_name='tName';
    protected static $db_fields = array('field1','field2','field3','field4','field5');

    public function __get($key)
    {

        if(!in_array($key, static::$db_fields))
            throw new Exception( $key . " doesn't exist.");

        return $this -> $key;

    }

    public function __set($key, $value)
    {

        if(!in_array($key, static::$db_fields))
            throw new Exception( $key . " doesn't exist.");

        $this -> $key = $value;

    }   

}

بهذه الطريقة تكون متأكدًا من عدم الوصول إلى قيم خارج قائمتك:

$event -> field1 = 'hello';  // --> OK
$event -> field17 = 'hello'; // --> Exception: field17 doesn't exist

echo $event -> field1;  // --> OK
echo $event -> field17; // --> Exception: field17 doesn't exist

أما بالنسبة لوجود إعلان متغير عام صريح في التعليمات البرمجية الخاصة بك، فلا حاجة لك طالما أنك لا تحتاج إلى التكرار على الكائنات الخاصة بك - ولكن في هذه الحالة عليك تنفيذ Iterator واجهة تعتمد على مجالك الثابت.

استخدام mutators:

giveacodicetagpre.

ثم يمكنك الوصول إليها مثل هذا:

giveacodicetagpre.

أو، إذا كنت لا تنشئ كائنا من الفصل:

giveacodicetagpre.

تحرير: بروح تعقيد الأشياء حتى لا يكون لديك انتهاك حدود، وأضاف الكود.

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