-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.php
89 lines (81 loc) · 1.75 KB
/
index.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
<?php
error_reporting(-1);
require 'Object.php';
require 'Constructor.php';
require 'functions.php';
$Point = new Object();
$Point->x = 0;
$Point->y = 0;
$Animal = new Constructor(function ($x = 0, $y = 0) {
$point = clone this()->point;
$point->x = $x;
$point->y = $y;
this()->point = $point;
});
$Animal->prototype->point = $Point;
$Animal->prototype->walk = function ($direction = 'N') {
$point = this()->point;
$direction = strtoupper($direction);
switch ($direction) {
case 'N':
$point->y++;
break;
case 'NE':
case 'EN':
$point->x++;
$point->y++;
break;
case 'E':
$point->x++;
break;
case 'SE':
case 'ES':
$point->x++;
$point->y--;
break;
case 'S':
$point->y--;
break;
case 'SW':
case 'WS':
$point->x--;
$point->y--;
break;
case 'W':
$point->x--;
break;
case 'NW':
case 'WN':
$point->x--;
$point->y++;
break;
}
echo 'Point {', $point->x, '; ', $point->y, '}', PHP_EOL;
return this();
};
$Animal->prototype->talk = function () {
echo 'Shhhh', PHP_EOL;
return this();
};
$cat = new Object($Animal);
$cat->talk = function () {
echo 'Meow', PHP_EOL;
};
$dog = new Object($Animal);
$dog->talk = function () {
echo 'Woof!', PHP_EOL;
};
$lion = new Object($cat);
$lion->talk = function () {
echo 'Rrrrr', PHP_EOL;
};
$cat
->walk('NE')
->walk('E')
->walk('SE');
$dog
->walk('N')
->walk('N');
$cat->talk();
$dog->talk();
$lion->talk();