دروس PHP

PHP الرئيسية مقدمة PHP تثبيت PHP بناء جملة PHP تعليقات PHP متغيرات PHP PHP صدى / طباعة أنواع بيانات PHP سلاسل PHP أرقام PHP PHP الرياضيات ثوابت PHP مشغلي PHP PHP إذا ... آخر ... Elseif مفتاح PHP حلقات PHP وظائف PHP مصفوفات PHP PHP Superglobals PHP RegEx

نماذج PHP

معالجة نموذج PHP التحقق من صحة نموذج PHP نموذج PHP مطلوب نموذج PHP URL / البريد الإلكتروني اكتمل نموذج PHP

PHP متقدم

تاريخ ووقت PHP تضمين PHP معالجة ملفات PHP فتح / قراءة ملف PHP إنشاء / كتابة ملف PHP تحميل ملف PHP ملفات تعريف الارتباط PHP جلسات PHP مرشحات PHP مرشحات PHP متقدم وظائف رد الاتصال PHP PHP JSON استثناءات PHP

PHP OOP

PHP ما هو OOP فئات / كائنات PHP منشئ PHP مدمر PHP معدِّلات الوصول إلى PHP الوراثة PHP ثوابت PHP فئات مجردة PHP واجهات PHP سمات PHP طرق PHP الثابتة خصائص PHP الثابتة مساحات أسماء PHP PHP تكرارات

قاعدة بيانات MySQL

قاعدة بيانات MySQL اتصال MySQL إنشاء قاعدة بيانات MySQL إنشاء جدول MySQL MySQL إدراج البيانات MySQL الحصول على آخر معرف إدراج عدة MySQL تم تجهيز MySQL MySQL حدد البيانات MySQL أين ترتيب MySQL حسب MySQL حذف البيانات تحديث بيانات MySQL بيانات MySQL المحدودة

لغة PHP XML

موزعي PHP XML محلل PHP SimpleXML PHP SimpleXML - احصل على PHP XML Expat PHP XML DOM

PHP - أجاكس

مقدمة أجاكس أجاكس بي إتش بي قاعدة بيانات أجاكس AJAX XML بحث أجاكس لايف استطلاع أجاكس

أمثلة PHP

أمثلة PHP مترجم PHP اختبار PHP تمارين PHP شهادة PHP

مرجع PHP

نظرة عامة على PHP صفيف PHP تقويم PHP تاريخ PHP دليل PHP خطأ PHP استثناء PHP نظام ملفات PHP مرشح PHP PHP FTP PHP JSON كلمات PHP PHP Libxml PHP Mail PHP الرياضيات متفرقات PHP PHP MySQLi شبكة PHP التحكم في إخراج PHP PHP RegEx PHP SimpleXML PHP ستريم سلسلة PHP معالجة متغيرة PHP محلل PHP XML PHP Zip المناطق الزمنية PHP

PHP OOP - فئات مجردة


PHP - ما هي الفئات والطرق المجردة؟

تكون فئات وأساليب الملخص عندما يكون للفصل الأصلي طريقة محددة ، ولكنها تحتاج إلى فئة (فئات) فرعية لتعبئة المهام.

فئة abstract هي فئة تحتوي على طريقة مجردة واحدة على الأقل. الطريقة المجردة هي طريقة تم التصريح عنها ، ولكن لم يتم تنفيذها في الكود.

يتم تحديد فئة أو طريقة مجردة abstract بالكلمة الأساسية:

بناء الجملة

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

عند التوريث من فئة مجردة ، يجب تحديد طريقة الفئة الفرعية بنفس الاسم ، ومعدِّل الوصول نفسه أو أقل تقييدًا. لذلك ، إذا تم تعريف الطريقة المجردة على أنها محمية ، فيجب تحديد طريقة الفئة الفرعية على أنها محمية أو عامة ، ولكن ليست خاصة. أيضًا ، يجب أن يكون نوع وعدد الوسائط المطلوبة هو نفسه. ومع ذلك ، قد تحتوي الفصول الفرعية على وسيطات اختيارية بالإضافة إلى ذلك.

لذلك ، عندما يتم توريث فئة فرعية من فئة مجردة ، لدينا القواعد التالية:

  • يجب تعريف طريقة الفئة الفرعية بنفس الاسم وإعادة تعريف طريقة الملخص الأصل
  • يجب تحديد أسلوب الفئة الفرعية بنفس معدل الوصول أو بمعدِّل وصول أقل تقييدًا
  • يجب أن يكون عدد الوسائط المطلوبة هو نفسه. ومع ذلك ، قد تحتوي الفئة الفرعية على وسيطات اختيارية بالإضافة إلى ذلك

لنلقي نظرة على مثال:

مثال

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

شرح المثال

فئات أودي وفولفو وستروين موروثة من فئة السيارات. هذا يعني أنه يمكن لفئات Audi و Volvo و Citroen استخدام خاصية اسم $ العامة بالإضافة إلى طريقة __construct () العامة من فئة السيارة بسبب الوراثة.

لكن intro () هي طريقة مجردة يجب تحديدها في جميع الفئات الفرعية ويجب أن تُرجع سلسلة نصية.



PHP - المزيد من أمثلة الفصل المجردة

لنلقِ نظرة على مثال آخر حيث الطريقة المجردة لها وسيطة:

مثال

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

لنلقِ نظرة على مثال آخر حيث يحتوي التابع abstract على وسيطة ، والفئة الفرعية بها وسيطان اختياريان لم يتم تعريفهما في الطريقة abstract للوالد:

مثال

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>