-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathArrayAccessBehavior.php
85 lines (78 loc) · 1.58 KB
/
ArrayAccessBehavior.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
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
/**
* The main class for the Behavior
*
* @author Niklas Närhinen <[email protected]>
*/
class ArrayAccessBehavior extends Behavior
{
public function objectMethods()
{
$script = '';
$script .= $this->addArrayAccessGetter();
$script .= $this->addArrayAccessSetter();
$script .= $this->addArrayAccessUnsetter();
$script .= $this->addArrayAccessIssetChecker();
return $script;
}
public function objectFilter(&$script)
{
$pattern = '/abstract class (\w+) extends (\w+) implements (\w+)/i';
$replace = 'abstract class ${1} extends ${2} implements ${3}, ArrayAccess';
$script = preg_replace($pattern, $replace, $script);
}
protected function addArrayAccessIssetChecker()
{
return "
public function offsetExists(\$offset)
{
try {
\$getter = 'get' . \$offset;
return \$this->\$getter() !== null;
}
catch (PropelException \$ex) {
return false;
}
}
";
}
protected function addArrayAccessGetter()
{
return "
public function offsetGet(\$offset)
{
\$getter = 'get' . \$offset;
return \$this->\$getter();
}
";
}
protected function addArrayAccessUnsetter()
{
return "
public function offsetUnset(\$offset)
{
try {
\$setter = 'set' . \$offset;
\$this->\$setter(null);
}
catch (PropelException \$ex) { }
}
";
}
protected function addArrayAccessSetter()
{
return "
public function offsetSet(\$offset, \$value)
{
\$setter = 'set' . \$offset;
\$this->\$setter(\$value);
}
";
}
}