حدد أعضاء البيانات داخل المنشئ
-
02-10-2019 - |
سؤال
لقد حصلت على هذا المقتطف الصغير من التعليمات البرمجية ، أريد أن أكون قادرًا على تحديد كل عنصر صفيف كعضو جديد للبيانات.
class Core_User
{
protected $data_members = array(
'id' => '%d',
'email' => '"%s"',
'password' => '"%s"',
'title' => '"%s"',
'first_name' => '"%s"',
'last_name' => '"%s"',
'time_added' => '%d' ,
'time_modified' => '%d' ,
);
function __construct($id = 0, $data = NULL)
{
foreach($this->data_members as $member){
//protected new data member
}
}
المحلول
// عضو بيانات جديد محمي
لن تكون قادرًا على إنشاء عقار غير عام في وقت التشغيل. إذا كان محميًا بالغ الأهمية ، فيمكنك إعلان صفيف أو كائن محمي وإدراج مفتاح/قيم فيه في المُنشئ
نصائح أخرى
- استخدم دائمًا $ هذا عندما تريد الوصول إلى أعضاء الكائن (يجب أن يكون $ this-> data_members في مُنشئ).
يمكنك محاولة تحديد الأساليب السحرية __get & __set (لست متأكدًا مما إذا كان يمكن حمايتها). :
protected function __get($name){ if (array_key_exists($name,$this->data_memebers)) { return $this->data_memebers[$name]; } throw new Exception("key $name doesn't not exist"); } protected function __set($name,$value){ if (array_key_exists($name,$this->data_memebers)) { $this->data_memebers[$name] = $value; } throw new Exception("key $name doesn't not exist"); }
ما تريد تحقيقه ممكن ، ومع ذلك لن تتمكن من صنع العقارات الجديدة protected
(لأن هذا ممكن فقط للأعضاء المحددة مسبقًا).
function __construct($id = 0, $data = NULL)
{
foreach($this->$data_memebers as $name => $value ){
$this->$name = $value;
}
}
لاحظ استخدام $
قبل name
في $this->$name
: هذا يجعل PHP يستخدم القيمة الحالية لـ $name
متغير كممتلكات.
لا تنتمي إلى StackOverflow