اذهب إلى المحتوى

السؤال

نشر

تعلمت مؤخرًا عن توابع getter و setter وكيفية عملها في عدة لغات مثل JavaScript وغيرها، لكن حاولت أن أقوم بعمل هذا النوع من التوابع في PHP ولم أنجح

كيفية إضافة توابع getters و setters في صنف Class بلغة PHP؟

Recommended Posts

  • 1
نشر

توفر لغة PHP دوال سحرية magic methods ومنها دالتين 

__get

__set

تستخدمان لقراءة قيم خاصيات الكائنات وإسناد قيم لها على الترتيب.

<?php
class MyClass {
  private $Field1;
  private $Field2;

  // قراءة قيمة خاصية
  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }

  // إسناد قيمة خاصية
  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}
?>

للدوال السابقة بعض المساوئ،

  • صعوبة و تعقيد تخصيص التحقق من إدخال قيم معينة لخواص معينة (قبول أرقام موجبة لبعض القيم و تواريخ لبعضها)
  • صعوبة عمل تنسيق للمخرجات/ مثل تنسيق التاريخ و العملات.
  • عدم التفريق بين محددات الوصول للمعاملات

لذلك من الأفضل تخصيص دالة لكل معامل من خواص الصنف و التعامل معها بالطريقة التي تناسبها أي تطبيق دالة set و get خاصة لكل خاصية

GET => $this->getProperty()

SET => $this->setProperty($value)

وتطبيقها بشكل بسيط (يمكن إضافة التحقق و تخصيص الخرج لكل خاصية)


    public function getField1() {
        return $this->Field1;
    }

    protected function setField2($x) {
        $this->Field2 = $x;
    }

62910e74d7adb_PHPgetsetgettersetter.jpg.bac21ac5f14c746983ba5137a74224e6.jpg

مثال:

class Person {
  private $name = '';
  private $birth_date;

  public function setName($name) {
      $this->name = $name;
  }

  public function getName() {
      return $this->name;
  }


  public function getBirthDate($format='Y-m-d') {
    //format $birth_date ...
    //$birth_date = ...
    return $birth_date;
  }

  public function setBirthDate($birth_date) {                   
    //if($birth_date is not valid) throw an exception ...          
    $this->birth_date = $birth_date;
  }

  public function getAge() {
    //calculate age ...
    return $age;
  }

}

 

  • 0
نشر
بتاريخ On 27/05/2022 at 18:25 قال Wael Aljamal:
  • التحقق من إدخال قيم معينة لخواص معينة (قبول أرقام موجبة لبعض القيم و تواريخ لبعضها)
  • صعوبة عمل تنسيق للمخرجات/ مثل تنسيق التاريخ و العملات.

في الحقيقة أحس أن فهمي لهذا الموضوع لازال سطحي أو يحتاج إلى مزيد من الخبرة العملية.

سؤالي هو : هل يمكنني متابعة المسار على الرغم من عدم إستيعابي لهذه النقطة جيدا أم أتوقف هنا لأتقن الدوال السحرية بشكل جيد أو لا ثم أنتقل إلى النقطة الموالية؟ هل إستيعاب بعض الأساسيات الصعبة بشكل قليل كاف للمرور الى التطبيق العملي للإستزادة والتعمق؟

شكرا جزيلا لك.

  • 0
نشر
بتاريخ منذ ساعة مضت قال عبد القادر فاروق:

في الحقيقة أحس أن فهمي لهذا الموضوع لازال سطحي أو يحتاج إلى مزيد من الخبرة العملية.

سؤالي هو : هل يمكنني متابعة المسار على الرغم من عدم إستيعابي لهذه النقطة جيدا أم أتوقف هنا لأتقن الدوال السحرية بشكل جيد أو لا ثم أنتقل إلى النقطة الموالية؟ هل إستيعاب بعض الأساسيات الصعبة بشكل قليل كاف للمرور الى التطبيق العملي للإستزادة والتعمق؟

شكرا جزيلا لك.

يمكنك تخطي الدرس والعودة إليه لاحقا، فعلياً لن يؤثر ذلك عليك،

و بمجرد ماظهر لك تطبيق للدوال السحرية راجع هذه الإجابة لتعمل مقارنة و تثبيت الفكرة والفهم السليم. 

يمكنك الاطلاع على أمثلة عن الانترنت أيضا ويوتيوب لزيادة الأفكار عنها.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...