Dziedziczenie w PHP

Stronę tą wyświetlono już: 217 razy

Mechanizm dziedziczenia

W PHP można dziedziczyć jedynie po jednej klasie. Do dziedziczenia używa się słowa kluczowego extends w następujący sposób:

Listing 1
  1. <?php
  2. // Klasa bazowa zawierająca wszystkie niezbędne dane
  3. class Style{
  4. private $styles;
  5. private $id;
  6. private $class_name;
  7. protected $text;
  8. public function __construct($styles, $id = Null, $class_name = Null){
  9. $this->styles = $styles;
  10. $this->id = $id;
  11. $this->class_name = $class_name;
  12. }
  13. public function getStyles(){
  14. $styles = "";
  15. if($this->id !== Null){
  16. $styles = "id = \"" . $this->id . "\" ";
  17. }
  18. if($this->class_name !== Null){
  19. $styles .= "class = \"" . $this->class_name . "\" ";
  20. }
  21. $styles .= "style = \"";
  22. foreach($this->styles as $style_name => $style_value){
  23. $styles .= $style_name . ":" . $style_value . ";";
  24. }
  25. $styles .= "\"";
  26. return $styles;
  27. }
  28. public function setText($text){
  29. $this->text = $tekst;
  30. }
  31. }
  32. // klasa pochodna dziedzicząca po klasie Style
  33. class Title extends Style{
  34. public function __construct($text, $styles = array(), $id = Null, $class_name = Null){
  35. parent::__construct($styles, $id, $class_name); // wywołanie konstruktora klasy bazowej
  36. $this->text = $text;
  37. }
  38. public function getHtml(){
  39. echo("<h1 " . $this->getStyles() . ">$this->text</h1>n");
  40. }
  41. }
  42. // klasa pochodna dziedzicząca po klasie Style
  43. class Paragraph extends Style{
  44. public function __construct($text, $styles = array(), $id = Null, $class_name = Null){
  45. parent::__construct($styles, $id, $class_name); // wywołanie kontroktora klasy bazowej
  46. $this->text = $text;
  47. }
  48. public function getHtml(){
  49. echo("<p " . $this->getStyles() . ">$this->text</p>n");
  50. }
  51. }
  52. $title = new Title("Lorem ipsum dolor sit amet");
  53. $title->getHtml();
  54. $paragraph = new Paragraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla dignissim convallis malesuada. Pellentesque pulvinar laoreet libero et sollicitudin. Sed vel massa eu turpis bibendum mattis. Fusce mauris enim, tincidunt sed volutpat sed, pretium sollicitudin magna. In a erat ac lacus gravida lobortis. Nam commodo pellentesque sapien pharetra varius. Suspendisse potenti. Integer at convallis nisi. Fusce tristique egestas enim, id lacinia odio varius malesuada. Curabitur orci nisl, rutrum ac condimentum sed, consequat ac risus. Vivamus quam arcu, mollis eu erat sit amet, ornare vulputate dui. In hac habitasse platea dictumst. Cras luctus dolor vitae risus aliquam, nec malesuada purus pharetra. Nulla facilisi. Vestibulum mi ipsum, venenatis ac elit vitae, tincidunt egestas ante. ", array("text-align" => "justify"));
  55. $paragraph->getHtml();
  56. ?>

Wynik działania powyższego kodu:

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla dignissim convallis malesuada. Pellentesque pulvinar laoreet libero et sollicitudin. Sed vel massa eu turpis bibendum mattis. Fusce mauris enim, tincidunt sed volutpat sed, pretium sollicitudin magna. In a erat ac lacus gravida lobortis. Nam commodo pellentesque sapien pharetra varius. Suspendisse potenti. Integer at convallis nisi. Fusce tristique egestas enim, id lacinia odio varius malesuada. Curabitur orci nisl, rutrum ac condimentum sed, consequat ac risus. Vivamus quam arcu, mollis eu erat sit amet, ornare vulputate dui. In hac habitasse platea dictumst. Cras luctus dolor vitae risus aliquam, nec malesuada purus pharetra. Nulla facilisi. Vestibulum mi ipsum, venenatis ac elit vitae, tincidunt egestas ante.

Kod Lorem ipsum ... został wygenerowany automatycznie na stronie: pl.lipsum.com.

Dostęp do metod i pól klasy bazowej

Klasa dziedzicząca ma ograniczony dostęp do metod klasy bazowej tylko do tych, które są publiczne public lub chronione protected. Do prywatnych private metod i pól klasy bazowej wewnątrz klasy dziedziczącej nie ma dostępu.

Komentarze