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

ما الفرق بين الأصناف المجردة والنهائية abstract & final php ؟

محمود سامي حسين

السؤال

السام عليكم ورحمه الله وبركاتة .

ما الفرق بين الأصناف المجردة والنهائية في لغة  abstract & final  php  ؟

مرفق مثال للتوضيح يرجي شرح الفرق بالكود .

<?php
/*
-الأصناف المجردة || الأصناف النهائية 
- abstract classes || final classes 
- مثال أختبار الأجهزة داخل مصنع أبل للتاكد من عملها بشكل جيد
*/

// أختبار الأجهزة داخل مصنع أبل مثلا 
abstract class appleFactory{

    abstract public function test_memory();
    abstract public function test_screan();
    abstract public function test_sound();

}


//أختبار جهاز أيفون  6
class iphone6 extends appleFactory{

    public function test_memory(){
        echo 'memory has been tested okey' .  ":)";
    }

    public function test_screan(){
        echo 'screan has been tested okey' .  ":)";
    }

    public function test_sound(){
        echo 'sound has been tested okey' .  ":)";
    }

}

// أختبار جهاز أيفون 7 

class iphone7 extends appleFactory{

    public function test_memory(){
        echo 'memory has been tested okey' .  ":)";
    }

    public function test_screan(){
        echo 'screan has been tested okey' .  ":)";
    }

    public function test_sound(){
        echo 'sound has been tested okey' .  ":)";
    }



}

$iphon6 = new iphone6();
var_dump($iphone6);

$iphon7 = new iphone7();
var_dump($iphone7);




// أختبار الأجهزة داخل مصنع أبل مثلا 
final class appleFactory2{

    final public function test_memory_1();
    final public function test_screan_1();
    final public function test_sound_1();

}


//أختبار جهاز أيفون 12
class iphone12 extends appleFactory2{

    public function test_memory_1(){
        echo 'memory has been tested okey' .  ":)";
    }

    public function test_screan_1(){
        echo 'screan has been tested okey' .  ":)";
    }

    public function test_sound_1(){
        echo 'sound has been tested okey' .  ":)";
    }

}

// أختبار جهاز أيفون 8 

class iphone8 extends appleFactory2{

    public function test_memory_1(){
        echo 'memory has been tested okey' .  ":)";
    }

    public function test_screan_1(){
        echo 'screan has been tested okey' .  ":)";
    }

    public function test_sound_1(){
        echo 'sound has been tested okey' .  ":)";
    }



}

$iphon12 = new iphone6();
var_dump($iphone12);

$iphon8 = new iphone7();
var_dump($iphone8);

?>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

لا يمكن المقارنة بينهما بشكل مباشر لان لكل منهما وظيفة:

  • الصنف المجرد abstract: هو صنف يعتبر قالبًا يمكن للأصناف الأخرى استخدامه وسترث تلك الأصناف منه كل التوابع والمتغيرات المعرفة داخله، ولا يمكن انشاء كائن من الأصناف المجردة
  • الكلمة المحجوزة final: يمكن تعريف صنف كصنف نهائي final أو تابع ما كتابع نهائي
    • عند تعريف صنف بذلك هذا يدل أن ذلك الصنف لا يمكن لأي صنف آخر أي يرثه
      <?php
      final class FinalClass {
        ...
      }
      
      class ChildClass extends FinalClass {
      }
      // final سينتج خطأ لا يمكن الوراثة من صنف 
      ?>

       

    • عند تعريف تابع كتابع نهائي لا يمكن للأصناف التي ترث ذلك التابع أن تعيد تعريف التابع نفسه ضمنها بما يعرف ب Overriding
      <?php
      class BaseClass {
         final public function finalMetod() {
           ...
         }
      }
      
      class ChildClass extends BaseClass {
         public function finalMetod() { // إعادة تعريف للتابع الموروث
           ...
         }
      }
      // final سينتج خطأ لا يمكن إعادة تعريف تابع 
      ?>

       

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...