forked from jkapuscik2/design-patterns-php
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdemo.php
More file actions
69 lines (57 loc) · 1.76 KB
/
demo.php
File metadata and controls
69 lines (57 loc) · 1.76 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
<?php
namespace Behavioral\Specification;
use DateTime;
require(__DIR__ . '/../../vendor/autoload.php');
$hackerStudent = new Candidate(
25,
[
new WorkExperience("Facebook", new DateTime("2016-10-01"), new DateTime("2017-11-01"))
],
[
new Education("University of Warsaw", new DateTime("2019-10-01"), new DateTime("2022-06-01"))
],
true
);
$student = new Candidate(
22,
[
new WorkExperience("Google", new DateTime("2016-10-01"), new DateTime("2017-11-01"))
],
[
new Education("University of Warsaw", new DateTime("2019-10-01"), new DateTime("2022-06-01"))
],
false
);
$recentGraduate = new Candidate(
29,
[
new WorkExperience("Microsoft", new DateTime("2018-01-01"), new DateTime("2018-10-01")),
new WorkExperience("Microsoft", new DateTime("2019-01-01"), new DateTime("2019-08-01"))
],
[
new Education("University of Warsaw", new DateTime("2018-10-01"), new DateTime("2020-06-01"))
],
false
);
$candidates = [
$hackerStudent,
$student,
$recentGraduate
];
$ageSpecification = new AgeSpecification(30);
$studentSpecification = new StudentSpecification();
$recentGraduateSpecification = new RecentGraduateSpecification();
$workExperienceSpecification = new WorkExperienceSpecification(1);
$convictedSpecification = new ConvictedSpecification();
$internshipSpecification = new AndSpecification(
$ageSpecification,
new OrSpecification($studentSpecification, $recentGraduateSpecification),
$workExperienceSpecification,
new NotSpecification($convictedSpecification)
);
$candidatesToContact = [];
foreach ($candidates as $candidate) {
if ($internshipSpecification->isSatisfiedBy($candidate)) {
$candidatesToContact[] = $candidate;
}
}