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

السؤال

نشر

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

ما الفرق بين الأصناف المجردة والنهائية في لغة  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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...