-
Notifications
You must be signed in to change notification settings - Fork 0
/
interfaces.php
127 lines (93 loc) · 2.02 KB
/
interfaces.php
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
<?php
interface CanBeFiltered {
public function filter();
}
class Favorited implements CanBeFiltered
{
public function filter()
{
}
}
class Unwatched implements CanBeFiltered
{
public function filter()
{
}
}
class Difficulty implements CanBeFiltered
{
public function filter()
{
}
}
//*****Repository example*****//
interface Repository {
public function save($data);
}
class MongoRepository implements Repository {
public function save($data)
{
}
}
class FileRepository implements Repository {
public function save($data)
{
}
}
//***** JSON example *****//
interface CastsToJson {
public function toJson();
}
class User implements CastsToJson {}
class Collection implements CastsToJson {}
//Program to an interface, not to an implementation
interface Logger {
public function execute($message);
}
class LogToFile implements Logger {
public function execute($message)
{
var_dump('log the message to a file: ' . $message);
}
}
class LogToDatabase implements Logger {
public function execute($message)
{
var_dump('log the message to a database: ' . $message);
}
}
class UsersController {
protected $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function show()
{
$user = "JohnDoe";
//How do we log this information??
$this->logger->execute($user);
}
}
$controller = new UsersController(new LogToDatabase);
$controller->show();
//Think of an interface as a contract. There is going to
//be an real logic inside. It lays down the terms for what
//any interpretation must adhere to.
interface Animal {
public function communicate();
}
//This is an implematation
class Dog implements Animal {
public function communicate()
{
return 'bark';
}
}
class Cat implements Animal {
public function communicate()
{
return 'meow';
}
}
//Extra credit: Polymorphism and the strategy pattern