⊗ppOpIhPPP 33 of 107 menu

ปัญหาของคุณสมบัติส่วนตัวในการสืบทอดใน OOP ใน PHP

ข้อเท็จจริงที่ว่าคุณสมบัติส่วนตัวไม่ถูกสืบทอด สามารถนำไปสู่ปัญหาที่ไม่คาดคิดได้ มาดูตัวอย่างกัน สมมติว่าเรามี คลาสพ่อแม่ที่มีคุณสมบัติส่วนตัว ดังต่อไปนี้:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

สมมติว่าในคลาสลูก เราได้ตัดสินใจ สร้างเมธอดที่จะเพิ่ม อายุขึ้นหนึ่งหน่วย อย่างไรก็ตาม ความพยายาม ในการเปลี่ยนแปลงคุณสมบัติส่วนตัวของคลาสพ่อแม่ จะนำไปสู่ข้อผิดพลาด:

<?php class Student extends User { public function incAge() { $this->age++; // ข้อผิดพลาด } } ?>

ข้อผิดพลาดจะหายไป ถ้าในคลาสลูก ประกาศคุณสมบัติส่วนตัว $age:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

นี่คือจุดที่กับดักรอเราอยู่! ในความเป็นจริง เราได้สร้าง คุณสมบัติส่วนตัวสองอัน: หนึ่งอันในคลาสพ่อแม่ และอีกอันในคลาสลูก และพวกมันทำงาน อย่างอิสระต่อกันโดยสิ้นเชิง นั่นหมายความว่า เมธอดของคลาสพ่อแม่จะเปลี่ยนแปลง คุณสมบัติของมันเอง และเมธอดของคลาสลูก - คุณสมบัติของมันเอง

ปัญหานี้ในความเป็นจริงมี วิธีแก้ไข เพียงแค่ต้องจัดการ คุณสมบัติส่วนตัวของคลาสพ่อแม่ ผ่านเมธอดของคลาสพ่อแม่นั้น มาเขียนโค้ดของเราใหม่ ให้สอดคล้องกับสิ่งนี้:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

สามารถทำให้ง่ายขึ้นได้:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

ในโค้ดต่อไปนี้ ในคลาสลูก ได้มีการโอเวอร์ไรด์เมธอดของคลาสพ่อแม่ โปรดแก้ไขปัญหาในโค้ดนี้:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // ข้อผิดพลาด } } } ?>
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ