From e404ab5489da14e3ec2b3585916496f7862696e3 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Sun, 2 Sep 2018 23:09:35 -0500 Subject: [PATCH] Working on inheritance page --- assets/templates/_table_of_contents.phtml | 5 +- code/classes-inheritance.php | 62 +++++++++++++++++++++++ code/classes-visibility.php | 23 +++++++-- config.php | 9 +++- 4 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 code/classes-inheritance.php diff --git a/assets/templates/_table_of_contents.phtml b/assets/templates/_table_of_contents.phtml index d6b368f..21c04f8 100644 --- a/assets/templates/_table_of_contents.phtml +++ b/assets/templates/_table_of_contents.phtml @@ -11,8 +11,9 @@
  • Loops
  • Arrays
  • Functions
  • -
  • Classes
  • -
  • Classes - Visibility
  • +
  • Classes: Introduction
  • +
  • Classes: Inheritance
  • +
  • Classes: Visibility
  • Credits diff --git a/code/classes-inheritance.php b/code/classes-inheritance.php new file mode 100644 index 0000000..f1eed47 --- /dev/null +++ b/code/classes-inheritance.php @@ -0,0 +1,62 @@ +drive(); + +// Even though the child class inherits a parent class' properties and methods, +// the child can still override the parent. +class Tractor extends Vehicle +{ + public function drive() + { + echo "driving slowly...\n"; + } +} + +// Outputs "driving slowly..." instead of "driving...". +$tractor = new Tractor(); +$tractor->drive(); + +// A class can use a parent's property or method from the "$this" variable. +class Motorcycle extends Vehicle +{ + public function pushPedal() + { + $this->drive(); + } +} + +// Outputs "driving...". +$cycle = new Motorcycle(); +$cycle->pushPedal(); + +// If you override a parent's property or method, the "$this" variable will refer to the child's +// implementation of the property or method. To call the parent's property or method explicity, +// use the "parent" keyword. +class Racecar extends Vehicle +{ + public function drive() + { + parent::drive(); + + echo "driving even faster...\n"; + } +} + +// Outputs "driving..." and "driving even faster...". +$racecar = new Racecar(); +$racecar->drive(); diff --git a/code/classes-visibility.php b/code/classes-visibility.php index 24e1d90..2833608 100644 --- a/code/classes-visibility.php +++ b/code/classes-visibility.php @@ -33,11 +33,28 @@ class Phone2 } } -// The "protected" and "private" keywords work a little differently, but we -// will learn more about "protected" when we discuss inheritance. -// However, they both prevent functions and properties from being accessed outside an object. +// The "protected" and "private" keywords work a little differently. +// They both prevent functions and properties from being accessed outside an object. +// However, a method or property marked "protected" can still be accessed by a child object. class Phone3 { private $number; + protected $caller; + + public function setNumber($number) + { + $this->number = $number; + } +} + +// In class "Smartphone", the "caller" property is accessible because the parent class +// has it marked as "protected". However, "Smartphone" cannot access the the "number" property +// because it is still listed as private. +class Smartphone extends Phone3 +{ + public function setCaller($caller) + { + $this->caller = $caller; + } } diff --git a/config.php b/config.php index f3742b9..39b7303 100644 --- a/config.php +++ b/config.php @@ -79,13 +79,20 @@ return [ 'subtitle' => 'Object-oriented programming', 'description' => '', 'previous' => 'functions', + 'next' => 'classes-inheritance', + ]), + Page::create('classes-inheritance', null, 'classes-inheritance.php', [ + 'title' => 'Classes Inheritance', + 'subtitle' => 'Extend your objects', + 'description' => '', + 'previous' => 'classes', 'next' => 'classes-visibility', ]), Page::create('classes-visibility', null, 'classes-visibility.php', [ 'title' => 'Classes Visibility', 'subtitle' => 'Privatizing your objects', 'description' => '', - 'previous' => 'classes', + 'previous' => 'classes-inheritance', 'next' => '', ]), ],