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

كيفية عمل توابع getter و setter في صنف Class في PHP؟

Emad Saif

السؤال

تعلمت مؤخرًا عن توابع 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...