⊗ppOpTrInr 77 of 107 menu

Traits ใน OOP ของ PHP

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

ใน PHP มีวิธีอื่นอีก ซึ่งก็คือการใช้ Traits Trait คือชุดของคุณสมบัติและเมธอดที่สามารถนำไปรวมไว้ในคลาสอื่นได้ ซึ่งคุณสมบัติและเมธอดของ Trait จะถูกมองโดยคลาสราวกับเป็นของตัวเอง

ไวยากรณ์ของ Trait นั้นเหมือนกับคลás ยกเว้นว่าชื่อ Trait ต้องประกาศโดยใช้คำสั่ง trait

ไม่สามารถสร้างอินสแตนซ์ของ Trait ได้ - Traits มีไว้สำหรับการเชื่อมต่อกับคลาสอื่นเท่านั้น การเชื่อมต่อนั้นทำได้ด้วยคำสั่ง use หลังจากนั้นตามด้วยช่องว่างและชื่อของ Trait ที่ต้องการเชื่อมต่อ คำสั่งนี้เขียนไว้ที่ต้นคลาส

มาดูการใช้งาน Traits ในตัวอย่างปฏิบัติกัน สมมติว่าเรามี Trait Helper นี้ ซึ่งมีคุณสมบัติส่วนตัว name และ age พร้อมทั้ง getters ของพวกมัน:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

สมมติว่าเรามีคลาส User นี้ ซึ่งในคอนสตรัคเตอร์มีการกำหนดคุณสมบัติ name และ age:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

ทีนี้มาเพิ่ม getters สำหรับคุณสมบัติของคลาส User ของเรากัน แต่เราจะไม่เขียนมันลงในคลás เอง แค่เชื่อมต่อ Trait Helper ซึ่งเมธอดเหล่านี้ได้ถูกนำไปใช้แล้ว:

<?php class User { use Helper; // เชื่อมต่อ trait public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

หลังจากเชื่อมต่อ Trait แล้ว ในคลásของเราจะปรากฏเมธอดและคุณสมบัติของ Trait นั้น โดยเราจะอ้างอิงถึงพวกมันราวกับเป็นเมธอดและคุณสมบัติของคลาสเอง:

<?php $user = new User('john', 30); echo $user->getName(); // จะแสดง 'john' echo $user->getAge(); // จะแสดง 30 ?>

เขียนคลาส City พร้อมคุณสมบัติ name, age, population และ getters สำหรับพวกมัน ให้คลาสของเราใช้ Trait Helper ที่เราสร้างไว้แล้ว เพื่อย่อโค้ดของตัวเอง

ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ