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' => '',
]),
],
From 5af12b3ea8a5470a7cb114712be42cf4178bf373 Mon Sep 17 00:00:00 2001
From: Andrew Davis
Date: Mon, 3 Sep 2018 11:23:01 -0500
Subject: [PATCH 2/5] Added to credits page
---
assets/css/site.css | 5 +++++
assets/templates/credits.phtml | 6 +++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/assets/css/site.css b/assets/css/site.css
index 18ac72d..fe19c8f 100644
--- a/assets/css/site.css
+++ b/assets/css/site.css
@@ -28,6 +28,11 @@ a:hover {
text-decoration: underline;
color: $primary-color-dark;
}
+hr {
+ border: 0;
+ height: 1px;
+ background-color: #EEE;
+}
p {
max-width: 40em;
line-height: 1.5;
diff --git a/assets/templates/credits.phtml b/assets/templates/credits.phtml
index 71e3bf9..730715a 100644
--- a/assets/templates/credits.phtml
+++ b/assets/templates/credits.phtml
@@ -10,7 +10,7 @@
experience for the PHP programming language.
- Source Links:
+ Sites used as a reference while writing PHP Apprentice: