-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathabstract-classess.php
More file actions
133 lines (115 loc) · 2.79 KB
/
abstract-classess.php
File metadata and controls
133 lines (115 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
// Example 1: ---------------------------------------------------------------------------------
// source:
// https://phpenthusiast.com/object-oriented-php-tutorials/abstract-classes-and-methods
// Context:
// Have an abstract class that has a method to commit child class to define it.
abstract class Car
{
// Abstract classes can have properties
protected $tankVolume;
// Abstract method
abstract public function milesOnFullTank();
// Abstract classes can have non abstract methods
public function setTankVolume($volume)
{
$this->tankVolume = $volume;
}
}
// create class out of abstract class
class Honda extends Car
{
public function milesOnFullTank()
{
return $this->tankVolume * 20;
}
}
class Toyota extends Car
{
public function milesOnFullTank()
{
return $this->tankVolume * 33;
}
// Method specify to this class
public function getColor()
{
return "beige";
}
}
$hondaCar = new Honda();
$toyotaCar = new Toyota();
// Simulation 1
$toyotaCar->setTankVolume(10);
echo 'This car can drive ' . $toyotaCar->milesOnFullTank() . ' miles on full tank. ' . PHP_EOL;
echo "\nThis car is of " . $toyotaCar->getColor() . ' color.' . PHP_EOL;
// Simulation 2
$hondaCar->setTankVolume(30);
echo "\nThis car can drive " . $hondaCar->milesOnFullTank() . ' miles on full tank. ' . PHP_EOL;
// Example 2: ---------------------------------------------------------------------------------
// Context:
// Animal
abstract class Animal
{
// Methods
abstract public function eat(string $food): bool;
abstract public function talk(bool $shout): string;
// non-abstract method.
public function walk(int $speed): bool
{
if ($speed > 0) {
return true;
} else {
return false;
}
}
}
class Cat extends Animal
{
// Methods
public function eat(string $food): bool
{
if ($food === "tuna") {
return true;
} else {
return false;
}
}
public function talk(bool $shout): string
{
if ($shout === true) {
return "MEOW!\n";
} else {
return "Meow.\n";
}
}
}
class Dog extends Animal
{
// Methods
public function eat(string $food): bool
{
if (($food === "dog food") || ($food === "meat")) {
return true;
} else {
return false;
}
;
}
public function talk(bool $shout): string
{
if ($shout === true) {
return "WOOF!\n";
} else {
return "Woof.\n";
}
}
}
// Simulation
$lula = new Cat();
echo $lula->walk(2);
echo $lula->eat("tuna");
echo $lula->talk(true);
$yame = new Dog();
echo $yame->walk(2);
echo $yame->eat("meat");
echo $yame->talk(true);