--- title: Class Inheritance localeTitle: الوراثة الطبقية --- ## الوراثة الطبقية _إعادة تسمية الكود مع الميراث في البرمجة الموجهة الموجهة_ هنا ، سوف نتحدث عن كيف يمكننا إعادة استخدام الكود الذي كتبناه دون الحاجة إلى أي تعليل برمجي باستخدام الميراث. ### فئة رجل هذه هي صفحتنا `Man` : `property_name" $this->name = $name; $this->age = $age; $this->height = $height; // 2B. Print out the man's attributes and values upon instantiation echo "Our man's name is: " . $this->name . "\n"; echo "He is " . $this->age . " years old and " . $this->height . " tall."; } // 3. Create class methods public function giveFirmHandshakes() { return "I give firm handshakes."; } public function beStubborn() { return "I am stubborn."; } public function notPutToiletPaper() { return "It's not humanly possible to remember to put toilet paper rolls when they are finished"; } // 4. Age getter method public function getAge() { return $this->age; } // Age setter method public function setAge($age) { $this->age = $age; } // 5. Favorite Drinks setter method public function setFavDrinks($drinks = array()) { if ($drinks) { $this->fav_drinks = $drinks; } } // Favorite Drinks getter method public function getFavDrinks() { return $this->fav_drinks; } } ` ### رجل صحي لنفترض أننا نريد إنشاء فئة أخرى تسمى `HealthyMan` والتي تحتوي على كل خصائص وأساليب فئة `Man` . بدون الاضطرار إلى إعادة كتابة جميع الرموز الخاصة بفئة `Man` ، يمكننا إعادة استخدام هذا الرمز باستخدام الكلمة الأساسية الممتدة. ` Our man's name is: Jackie // => He is 25 years old and 5' 5" tall. ` يمكننا المضي قدمًا ووضع رياضة ومشروبات HealthyMan aka aka المفضلة. `fav_sports = ['swimming', 'weight training']; print_r($jackie->fav_sports); // => // Array // ( // [0] => swimming // [1] => weight training // ) $jackie->setFavDrinks(['Matcha tea', 'Oolong Tea']); print_r($jackie->getFavDrinks()); // => // Array // ( // [0] => Matcha tea // [1] => Oolong Tea // ) ` الآن دعنا نرى ما إذا كان باستطاعتنا الاتصال بطرق `giveFirmHandshakes()` الرجل مثل `giveFirmHandshakes()` و `beStubborn()` و `notPutToiletPaper()` . `giveFirmHandshakes(); // => I give firm handshakes. echo "\n" . $jackie->beStubborn(); // => I am stubborn. echo "\n" . $jackie->notPutToiletPaper(); // => It's not humanly possible to remember to put toilet paper rolls when they are finished ` نحصل على كل هذه الأشياء من خلال مجرد ترميز فئة رجل باستخدام الكلمة الأساسية الممتدة. ### رجل صحي حقيقي إذا كنا نرث `HealthyMan` من فئة `Man` ولا نفعل شيئًا بها ، فعندئذٍ يتفوق على الهدف كله. يحتوي تصنيف HealthyMan على خصائص إضافية مثل `body_fat_percentage` و `workout_per_week` ، وأساليب مثل `eatHealthy()` و `meditateDaily()` و `laughOften()` . بما أن هذه خصائص شخصية ، فيمكننا إما أن نضع عليها رؤية محمية أو خاصة وأن ننشئ طرق تعيين / تراكب للتغليف الكامل. `body_fat_percentage = $fat_percentage; } public function getBodyFatPercentage() { return $this->body_fat_percentage; } public function setWorkoutPerWeek($workout_times) { $this->workout_per_week = $workout_times; } public function getWorkoutPerWeek() { return $this->workout_per_week; } } ` يمكننا استدعاء هذه الطرق لمعرفة ما إذا كانت تعمل كما هو متوقع: `eatHealthy(); // => I only eat healthy meals. echo "\n" . $jackie->meditateDaily(); // => I set aside 20 minutes daily to meditate. echo "\n" . $jackie->laughOften(); // => I watch funny TV shows to unwind myself. $jackie->setBodyFatPercentage(12); echo "\nBody Fat %: " . $jackie->getBodyFatPercentage(); // => Body Fat %: 12 $jackie->setWorkoutPerWeek(5); echo "\nWorkout Times Per Week: " . $jackie->getWorkoutPerWeek(); // => Workout Times Per Week: 5 ` لقد نجحنا في إعادة استخدام الشفرة الحالية ونفذنا برنامجًا دراسيًا للأطفال. ### هل هو ذلك العنيد؟ على الرغم من أنه ورث عن `beStubborn()` من فئة Man ، حيث أن Jackie رجل سليم ، فهو عنيد فقط مرة واحدة فقط في فترة. يمكننا أن نحصل على `beStubborn()` " `beStubborn()` Healthy Man's `beStubborn()` " ليقول "أنا عنيد من حين `beStubborn()` " بدلاً من "أنا عنيد" فقط عن طريق تجاوز أسلوب "الطبقة الأم". `beStubborn(); // => I am stubborn once in a while. ` يوضح هذا كيف يعمل overriding الأسلوب في OOP. باستخدام تجاوز الأسلوب ، نقوم بشكل أساسي بإعادة تعريف طريقة "الفئة الأصل" داخل الفئة الفرعية. بهذه الطريقة ، يحتفظ أي مثيل لفئة الأبوين بطريقته الأصلية في حين أن أي مثيل للفئة الفرعية له الطريقة المعدلة أو التي تم تجاوزها.