سؤال

قل أن لدي نموذجًا بسيطًا جدًا يشبه هذا:

class Model_Person extends ORM
{
 /*
     CREATE TABLE `persons` (
   `id` INT PRIMARY KEY AUTO_INCREMENT,
   `firstname` VARCHAR(45) NOT NULL,
   `lastname` VARCHAR(45) NOT NULL,
   `date_of_birth` DATE NOT NULL,
  );
 */
}

هل هناك طريقة يمكنني إضافة نوع من خاصية التظاهر مع الاسم الكامل؟

حتى أتمكن من القيام بذلك: على سبيل المثال:

$person = ORM::factory('person', 7);
echo $person->fullname;

بدلا من هذا:

$person = ORM::factory('person', 7);
echo $person->firstname.' '.$person->lastname;

مثال آخر يمكن أن يكون is_young الممتلكات التي من شأنها حساب عمر الأشخاص وتعود بشكل صحيح إذا كان العمر أقل من رقم معين.

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

المحلول

يمكنك استخدام "السحر" __get() طريقة مثل هذه:

public function __get($column)
{
    switch($column)
    {
        case 'fullname' : 
            return $this->firstname.' '.$this->lastname;

        case 'is_young' :
            // calculate persons age
    }
    return parent::__get($column);
}

أو يمكنك إنشاء طرق إضافية مثل fullname() و age() (يبدو أفضل بالنسبة لي).

نصائح أخرى

لماذا لا تستخدم هذا الحل؟

class Model_Person extends ORM 
{
      public function fullname()
      {
           return $this->firstname.' '.$this->lastname;
      }
 }

$person = ORM::factory('person', 1); 
echo $person->fullname();

يمكنك القيام بما يلي application/classes/ORM.php (application/classes/orm.php لكوهانا قبل 3.2):

<?php
class ORM extends Kohana_ORM {
    public function __get($name) {
        $getter = 'get_' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter();
        }

        return parent::__get($name);
    }
}

ثم يمكنك فقط إضافة طريقة إلى فئة النموذج الخاصة بك:

public function get_fullname() {
    return $this->firstname . ' ' . $this->lastname;
}

وتكون قادرة على الوصول إليها كعقار.

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