@@ -9,28 +9,28 @@ |
||
9 | 9 | */ |
10 | 10 | interface ContainerInterface |
11 | 11 | { |
12 | - /** |
|
13 | - * Finds an entry of the container by its identifier and returns it. |
|
14 | - * |
|
15 | - * @param string $id Identifier of the entry to look for. |
|
16 | - * |
|
17 | - * @throws NotFoundExceptionInterface No entry was found for **this** identifier. |
|
18 | - * @throws ContainerExceptionInterface Error while retrieving the entry. |
|
19 | - * |
|
20 | - * @return mixed Entry. |
|
21 | - */ |
|
22 | - public function get(string $id); |
|
12 | + /** |
|
13 | + * Finds an entry of the container by its identifier and returns it. |
|
14 | + * |
|
15 | + * @param string $id Identifier of the entry to look for. |
|
16 | + * |
|
17 | + * @throws NotFoundExceptionInterface No entry was found for **this** identifier. |
|
18 | + * @throws ContainerExceptionInterface Error while retrieving the entry. |
|
19 | + * |
|
20 | + * @return mixed Entry. |
|
21 | + */ |
|
22 | + public function get(string $id); |
|
23 | 23 | |
24 | - /** |
|
25 | - * Returns true if the container can return an entry for the given identifier. |
|
26 | - * Returns false otherwise. |
|
27 | - * |
|
28 | - * `has($id)` returning true does not mean that `get($id)` will not throw an exception. |
|
29 | - * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`. |
|
30 | - * |
|
31 | - * @param string $id Identifier of the entry to look for. |
|
32 | - * |
|
33 | - * @return bool |
|
34 | - */ |
|
35 | - public function has(string $id); |
|
24 | + /** |
|
25 | + * Returns true if the container can return an entry for the given identifier. |
|
26 | + * Returns false otherwise. |
|
27 | + * |
|
28 | + * `has($id)` returning true does not mean that `get($id)` will not throw an exception. |
|
29 | + * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`. |
|
30 | + * |
|
31 | + * @param string $id Identifier of the entry to look for. |
|
32 | + * |
|
33 | + * @return bool |
|
34 | + */ |
|
35 | + public function has(string $id); |
|
36 | 36 | } |
@@ -4,111 +4,111 @@ |
||
4 | 4 | |
5 | 5 | interface CacheInterface |
6 | 6 | { |
7 | - /** |
|
8 | - * Fetches a value from the cache. |
|
9 | - * |
|
10 | - * @param string $key The unique key of this item in the cache. |
|
11 | - * @param mixed $default Default value to return if the key does not exist. |
|
12 | - * |
|
13 | - * @return mixed The value of the item from the cache, or $default in case of cache miss. |
|
14 | - * |
|
15 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
16 | - * MUST be thrown if the $key string is not a legal value. |
|
17 | - */ |
|
18 | - public function get($key, $default = null); |
|
7 | + /** |
|
8 | + * Fetches a value from the cache. |
|
9 | + * |
|
10 | + * @param string $key The unique key of this item in the cache. |
|
11 | + * @param mixed $default Default value to return if the key does not exist. |
|
12 | + * |
|
13 | + * @return mixed The value of the item from the cache, or $default in case of cache miss. |
|
14 | + * |
|
15 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
16 | + * MUST be thrown if the $key string is not a legal value. |
|
17 | + */ |
|
18 | + public function get($key, $default = null); |
|
19 | 19 | |
20 | - /** |
|
21 | - * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time. |
|
22 | - * |
|
23 | - * @param string $key The key of the item to store. |
|
24 | - * @param mixed $value The value of the item to store, must be serializable. |
|
25 | - * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and |
|
26 | - * the driver supports TTL then the library may set a default value |
|
27 | - * for it or let the driver take care of that. |
|
28 | - * |
|
29 | - * @return bool True on success and false on failure. |
|
30 | - * |
|
31 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
32 | - * MUST be thrown if the $key string is not a legal value. |
|
33 | - */ |
|
34 | - public function set($key, $value, $ttl = null); |
|
20 | + /** |
|
21 | + * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time. |
|
22 | + * |
|
23 | + * @param string $key The key of the item to store. |
|
24 | + * @param mixed $value The value of the item to store, must be serializable. |
|
25 | + * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and |
|
26 | + * the driver supports TTL then the library may set a default value |
|
27 | + * for it or let the driver take care of that. |
|
28 | + * |
|
29 | + * @return bool True on success and false on failure. |
|
30 | + * |
|
31 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
32 | + * MUST be thrown if the $key string is not a legal value. |
|
33 | + */ |
|
34 | + public function set($key, $value, $ttl = null); |
|
35 | 35 | |
36 | - /** |
|
37 | - * Delete an item from the cache by its unique key. |
|
38 | - * |
|
39 | - * @param string $key The unique cache key of the item to delete. |
|
40 | - * |
|
41 | - * @return bool True if the item was successfully removed. False if there was an error. |
|
42 | - * |
|
43 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
44 | - * MUST be thrown if the $key string is not a legal value. |
|
45 | - */ |
|
46 | - public function delete($key); |
|
36 | + /** |
|
37 | + * Delete an item from the cache by its unique key. |
|
38 | + * |
|
39 | + * @param string $key The unique cache key of the item to delete. |
|
40 | + * |
|
41 | + * @return bool True if the item was successfully removed. False if there was an error. |
|
42 | + * |
|
43 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
44 | + * MUST be thrown if the $key string is not a legal value. |
|
45 | + */ |
|
46 | + public function delete($key); |
|
47 | 47 | |
48 | - /** |
|
49 | - * Wipes clean the entire cache's keys. |
|
50 | - * |
|
51 | - * @return bool True on success and false on failure. |
|
52 | - */ |
|
53 | - public function clear(); |
|
48 | + /** |
|
49 | + * Wipes clean the entire cache's keys. |
|
50 | + * |
|
51 | + * @return bool True on success and false on failure. |
|
52 | + */ |
|
53 | + public function clear(); |
|
54 | 54 | |
55 | - /** |
|
56 | - * Obtains multiple cache items by their unique keys. |
|
57 | - * |
|
58 | - * @param iterable $keys A list of keys that can obtained in a single operation. |
|
59 | - * @param mixed $default Default value to return for keys that do not exist. |
|
60 | - * |
|
61 | - * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. |
|
62 | - * |
|
63 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
64 | - * MUST be thrown if $keys is neither an array nor a Traversable, |
|
65 | - * or if any of the $keys are not a legal value. |
|
66 | - */ |
|
67 | - public function getMultiple($keys, $default = null); |
|
55 | + /** |
|
56 | + * Obtains multiple cache items by their unique keys. |
|
57 | + * |
|
58 | + * @param iterable $keys A list of keys that can obtained in a single operation. |
|
59 | + * @param mixed $default Default value to return for keys that do not exist. |
|
60 | + * |
|
61 | + * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. |
|
62 | + * |
|
63 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
64 | + * MUST be thrown if $keys is neither an array nor a Traversable, |
|
65 | + * or if any of the $keys are not a legal value. |
|
66 | + */ |
|
67 | + public function getMultiple($keys, $default = null); |
|
68 | 68 | |
69 | - /** |
|
70 | - * Persists a set of key => value pairs in the cache, with an optional TTL. |
|
71 | - * |
|
72 | - * @param iterable $values A list of key => value pairs for a multiple-set operation. |
|
73 | - * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and |
|
74 | - * the driver supports TTL then the library may set a default value |
|
75 | - * for it or let the driver take care of that. |
|
76 | - * |
|
77 | - * @return bool True on success and false on failure. |
|
78 | - * |
|
79 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
80 | - * MUST be thrown if $values is neither an array nor a Traversable, |
|
81 | - * or if any of the $values are not a legal value. |
|
82 | - */ |
|
83 | - public function setMultiple($values, $ttl = null); |
|
69 | + /** |
|
70 | + * Persists a set of key => value pairs in the cache, with an optional TTL. |
|
71 | + * |
|
72 | + * @param iterable $values A list of key => value pairs for a multiple-set operation. |
|
73 | + * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and |
|
74 | + * the driver supports TTL then the library may set a default value |
|
75 | + * for it or let the driver take care of that. |
|
76 | + * |
|
77 | + * @return bool True on success and false on failure. |
|
78 | + * |
|
79 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
80 | + * MUST be thrown if $values is neither an array nor a Traversable, |
|
81 | + * or if any of the $values are not a legal value. |
|
82 | + */ |
|
83 | + public function setMultiple($values, $ttl = null); |
|
84 | 84 | |
85 | - /** |
|
86 | - * Deletes multiple cache items in a single operation. |
|
87 | - * |
|
88 | - * @param iterable $keys A list of string-based keys to be deleted. |
|
89 | - * |
|
90 | - * @return bool True if the items were successfully removed. False if there was an error. |
|
91 | - * |
|
92 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
93 | - * MUST be thrown if $keys is neither an array nor a Traversable, |
|
94 | - * or if any of the $keys are not a legal value. |
|
95 | - */ |
|
96 | - public function deleteMultiple($keys); |
|
85 | + /** |
|
86 | + * Deletes multiple cache items in a single operation. |
|
87 | + * |
|
88 | + * @param iterable $keys A list of string-based keys to be deleted. |
|
89 | + * |
|
90 | + * @return bool True if the items were successfully removed. False if there was an error. |
|
91 | + * |
|
92 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
93 | + * MUST be thrown if $keys is neither an array nor a Traversable, |
|
94 | + * or if any of the $keys are not a legal value. |
|
95 | + */ |
|
96 | + public function deleteMultiple($keys); |
|
97 | 97 | |
98 | - /** |
|
99 | - * Determines whether an item is present in the cache. |
|
100 | - * |
|
101 | - * NOTE: It is recommended that has() is only to be used for cache warming type purposes |
|
102 | - * and not to be used within your live applications operations for get/set, as this method |
|
103 | - * is subject to a race condition where your has() will return true and immediately after, |
|
104 | - * another script can remove it making the state of your app out of date. |
|
105 | - * |
|
106 | - * @param string $key The cache item key. |
|
107 | - * |
|
108 | - * @return bool |
|
109 | - * |
|
110 | - * @throws \Psr\SimpleCache\InvalidArgumentException |
|
111 | - * MUST be thrown if the $key string is not a legal value. |
|
112 | - */ |
|
113 | - public function has($key); |
|
98 | + /** |
|
99 | + * Determines whether an item is present in the cache. |
|
100 | + * |
|
101 | + * NOTE: It is recommended that has() is only to be used for cache warming type purposes |
|
102 | + * and not to be used within your live applications operations for get/set, as this method |
|
103 | + * is subject to a race condition where your has() will return true and immediately after, |
|
104 | + * another script can remove it making the state of your app out of date. |
|
105 | + * |
|
106 | + * @param string $key The cache item key. |
|
107 | + * |
|
108 | + * @return bool |
|
109 | + * |
|
110 | + * @throws \Psr\SimpleCache\InvalidArgumentException |
|
111 | + * MUST be thrown if the $key string is not a legal value. |
|
112 | + */ |
|
113 | + public function has($key); |
|
114 | 114 | } |
@@ -12,19 +12,19 @@ |
||
12 | 12 | */ |
13 | 13 | class NullLogger extends AbstractLogger |
14 | 14 | { |
15 | - /** |
|
16 | - * Logs with an arbitrary level. |
|
17 | - * |
|
18 | - * @param mixed $level |
|
19 | - * @param string $message |
|
20 | - * @param array $context |
|
21 | - * |
|
22 | - * @return void |
|
23 | - * |
|
24 | - * @throws \Psr\Log\InvalidArgumentException |
|
25 | - */ |
|
26 | - public function log($level, $message, array $context = array()) |
|
27 | - { |
|
28 | - // noop |
|
29 | - } |
|
15 | + /** |
|
16 | + * Logs with an arbitrary level. |
|
17 | + * |
|
18 | + * @param mixed $level |
|
19 | + * @param string $message |
|
20 | + * @param array $context |
|
21 | + * |
|
22 | + * @return void |
|
23 | + * |
|
24 | + * @throws \Psr\Log\InvalidArgumentException |
|
25 | + */ |
|
26 | + public function log($level, $message, array $context = array()) |
|
27 | + { |
|
28 | + // noop |
|
29 | + } |
|
30 | 30 | } |
@@ -12,131 +12,131 @@ |
||
12 | 12 | */ |
13 | 13 | trait LoggerTrait |
14 | 14 | { |
15 | - /** |
|
16 | - * System is unusable. |
|
17 | - * |
|
18 | - * @param string $message |
|
19 | - * @param array $context |
|
20 | - * |
|
21 | - * @return void |
|
22 | - */ |
|
23 | - public function emergency($message, array $context = array()) |
|
24 | - { |
|
25 | - $this->log(LogLevel::EMERGENCY, $message, $context); |
|
26 | - } |
|
15 | + /** |
|
16 | + * System is unusable. |
|
17 | + * |
|
18 | + * @param string $message |
|
19 | + * @param array $context |
|
20 | + * |
|
21 | + * @return void |
|
22 | + */ |
|
23 | + public function emergency($message, array $context = array()) |
|
24 | + { |
|
25 | + $this->log(LogLevel::EMERGENCY, $message, $context); |
|
26 | + } |
|
27 | 27 | |
28 | - /** |
|
29 | - * Action must be taken immediately. |
|
30 | - * |
|
31 | - * Example: Entire website down, database unavailable, etc. This should |
|
32 | - * trigger the SMS alerts and wake you up. |
|
33 | - * |
|
34 | - * @param string $message |
|
35 | - * @param array $context |
|
36 | - * |
|
37 | - * @return void |
|
38 | - */ |
|
39 | - public function alert($message, array $context = array()) |
|
40 | - { |
|
41 | - $this->log(LogLevel::ALERT, $message, $context); |
|
42 | - } |
|
28 | + /** |
|
29 | + * Action must be taken immediately. |
|
30 | + * |
|
31 | + * Example: Entire website down, database unavailable, etc. This should |
|
32 | + * trigger the SMS alerts and wake you up. |
|
33 | + * |
|
34 | + * @param string $message |
|
35 | + * @param array $context |
|
36 | + * |
|
37 | + * @return void |
|
38 | + */ |
|
39 | + public function alert($message, array $context = array()) |
|
40 | + { |
|
41 | + $this->log(LogLevel::ALERT, $message, $context); |
|
42 | + } |
|
43 | 43 | |
44 | - /** |
|
45 | - * Critical conditions. |
|
46 | - * |
|
47 | - * Example: Application component unavailable, unexpected exception. |
|
48 | - * |
|
49 | - * @param string $message |
|
50 | - * @param array $context |
|
51 | - * |
|
52 | - * @return void |
|
53 | - */ |
|
54 | - public function critical($message, array $context = array()) |
|
55 | - { |
|
56 | - $this->log(LogLevel::CRITICAL, $message, $context); |
|
57 | - } |
|
44 | + /** |
|
45 | + * Critical conditions. |
|
46 | + * |
|
47 | + * Example: Application component unavailable, unexpected exception. |
|
48 | + * |
|
49 | + * @param string $message |
|
50 | + * @param array $context |
|
51 | + * |
|
52 | + * @return void |
|
53 | + */ |
|
54 | + public function critical($message, array $context = array()) |
|
55 | + { |
|
56 | + $this->log(LogLevel::CRITICAL, $message, $context); |
|
57 | + } |
|
58 | 58 | |
59 | - /** |
|
60 | - * Runtime errors that do not require immediate action but should typically |
|
61 | - * be logged and monitored. |
|
62 | - * |
|
63 | - * @param string $message |
|
64 | - * @param array $context |
|
65 | - * |
|
66 | - * @return void |
|
67 | - */ |
|
68 | - public function error($message, array $context = array()) |
|
69 | - { |
|
70 | - $this->log(LogLevel::ERROR, $message, $context); |
|
71 | - } |
|
59 | + /** |
|
60 | + * Runtime errors that do not require immediate action but should typically |
|
61 | + * be logged and monitored. |
|
62 | + * |
|
63 | + * @param string $message |
|
64 | + * @param array $context |
|
65 | + * |
|
66 | + * @return void |
|
67 | + */ |
|
68 | + public function error($message, array $context = array()) |
|
69 | + { |
|
70 | + $this->log(LogLevel::ERROR, $message, $context); |
|
71 | + } |
|
72 | 72 | |
73 | - /** |
|
74 | - * Exceptional occurrences that are not errors. |
|
75 | - * |
|
76 | - * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
77 | - * that are not necessarily wrong. |
|
78 | - * |
|
79 | - * @param string $message |
|
80 | - * @param array $context |
|
81 | - * |
|
82 | - * @return void |
|
83 | - */ |
|
84 | - public function warning($message, array $context = array()) |
|
85 | - { |
|
86 | - $this->log(LogLevel::WARNING, $message, $context); |
|
87 | - } |
|
73 | + /** |
|
74 | + * Exceptional occurrences that are not errors. |
|
75 | + * |
|
76 | + * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
77 | + * that are not necessarily wrong. |
|
78 | + * |
|
79 | + * @param string $message |
|
80 | + * @param array $context |
|
81 | + * |
|
82 | + * @return void |
|
83 | + */ |
|
84 | + public function warning($message, array $context = array()) |
|
85 | + { |
|
86 | + $this->log(LogLevel::WARNING, $message, $context); |
|
87 | + } |
|
88 | 88 | |
89 | - /** |
|
90 | - * Normal but significant events. |
|
91 | - * |
|
92 | - * @param string $message |
|
93 | - * @param array $context |
|
94 | - * |
|
95 | - * @return void |
|
96 | - */ |
|
97 | - public function notice($message, array $context = array()) |
|
98 | - { |
|
99 | - $this->log(LogLevel::NOTICE, $message, $context); |
|
100 | - } |
|
89 | + /** |
|
90 | + * Normal but significant events. |
|
91 | + * |
|
92 | + * @param string $message |
|
93 | + * @param array $context |
|
94 | + * |
|
95 | + * @return void |
|
96 | + */ |
|
97 | + public function notice($message, array $context = array()) |
|
98 | + { |
|
99 | + $this->log(LogLevel::NOTICE, $message, $context); |
|
100 | + } |
|
101 | 101 | |
102 | - /** |
|
103 | - * Interesting events. |
|
104 | - * |
|
105 | - * Example: User logs in, SQL logs. |
|
106 | - * |
|
107 | - * @param string $message |
|
108 | - * @param array $context |
|
109 | - * |
|
110 | - * @return void |
|
111 | - */ |
|
112 | - public function info($message, array $context = array()) |
|
113 | - { |
|
114 | - $this->log(LogLevel::INFO, $message, $context); |
|
115 | - } |
|
102 | + /** |
|
103 | + * Interesting events. |
|
104 | + * |
|
105 | + * Example: User logs in, SQL logs. |
|
106 | + * |
|
107 | + * @param string $message |
|
108 | + * @param array $context |
|
109 | + * |
|
110 | + * @return void |
|
111 | + */ |
|
112 | + public function info($message, array $context = array()) |
|
113 | + { |
|
114 | + $this->log(LogLevel::INFO, $message, $context); |
|
115 | + } |
|
116 | 116 | |
117 | - /** |
|
118 | - * Detailed debug information. |
|
119 | - * |
|
120 | - * @param string $message |
|
121 | - * @param array $context |
|
122 | - * |
|
123 | - * @return void |
|
124 | - */ |
|
125 | - public function debug($message, array $context = array()) |
|
126 | - { |
|
127 | - $this->log(LogLevel::DEBUG, $message, $context); |
|
128 | - } |
|
117 | + /** |
|
118 | + * Detailed debug information. |
|
119 | + * |
|
120 | + * @param string $message |
|
121 | + * @param array $context |
|
122 | + * |
|
123 | + * @return void |
|
124 | + */ |
|
125 | + public function debug($message, array $context = array()) |
|
126 | + { |
|
127 | + $this->log(LogLevel::DEBUG, $message, $context); |
|
128 | + } |
|
129 | 129 | |
130 | - /** |
|
131 | - * Logs with an arbitrary level. |
|
132 | - * |
|
133 | - * @param mixed $level |
|
134 | - * @param string $message |
|
135 | - * @param array $context |
|
136 | - * |
|
137 | - * @return void |
|
138 | - * |
|
139 | - * @throws \Psr\Log\InvalidArgumentException |
|
140 | - */ |
|
141 | - abstract public function log($level, $message, array $context = array()); |
|
130 | + /** |
|
131 | + * Logs with an arbitrary level. |
|
132 | + * |
|
133 | + * @param mixed $level |
|
134 | + * @param string $message |
|
135 | + * @param array $context |
|
136 | + * |
|
137 | + * @return void |
|
138 | + * |
|
139 | + * @throws \Psr\Log\InvalidArgumentException |
|
140 | + */ |
|
141 | + abstract public function log($level, $message, array $context = array()); |
|
142 | 142 | } |
@@ -14,125 +14,125 @@ |
||
14 | 14 | */ |
15 | 15 | abstract class LoggerInterfaceTest extends TestCase |
16 | 16 | { |
17 | - /** |
|
18 | - * @return LoggerInterface |
|
19 | - */ |
|
20 | - abstract public function getLogger(); |
|
21 | - |
|
22 | - /** |
|
23 | - * This must return the log messages in order. |
|
24 | - * |
|
25 | - * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>". |
|
26 | - * |
|
27 | - * Example ->error('Foo') would yield "error Foo". |
|
28 | - * |
|
29 | - * @return string[] |
|
30 | - */ |
|
31 | - abstract public function getLogs(); |
|
32 | - |
|
33 | - public function testImplements() |
|
34 | - { |
|
35 | - $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); |
|
36 | - } |
|
37 | - |
|
38 | - /** |
|
39 | - * @dataProvider provideLevelsAndMessages |
|
40 | - */ |
|
41 | - public function testLogsAtAllLevels($level, $message) |
|
42 | - { |
|
43 | - $logger = $this->getLogger(); |
|
44 | - $logger->{$level}($message, array('user' => 'Bob')); |
|
45 | - $logger->log($level, $message, array('user' => 'Bob')); |
|
46 | - |
|
47 | - $expected = array( |
|
48 | - $level.' message of level '.$level.' with context: Bob', |
|
49 | - $level.' message of level '.$level.' with context: Bob', |
|
50 | - ); |
|
51 | - $this->assertEquals($expected, $this->getLogs()); |
|
52 | - } |
|
53 | - |
|
54 | - public function provideLevelsAndMessages() |
|
55 | - { |
|
56 | - return array( |
|
57 | - LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), |
|
58 | - LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), |
|
59 | - LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), |
|
60 | - LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), |
|
61 | - LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), |
|
62 | - LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), |
|
63 | - LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), |
|
64 | - LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), |
|
65 | - ); |
|
66 | - } |
|
67 | - |
|
68 | - /** |
|
69 | - * @expectedException \Psr\Log\InvalidArgumentException |
|
70 | - */ |
|
71 | - public function testThrowsOnInvalidLevel() |
|
72 | - { |
|
73 | - $logger = $this->getLogger(); |
|
74 | - $logger->log('invalid level', 'Foo'); |
|
75 | - } |
|
76 | - |
|
77 | - public function testContextReplacement() |
|
78 | - { |
|
79 | - $logger = $this->getLogger(); |
|
80 | - $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); |
|
81 | - |
|
82 | - $expected = array('info {Message {nothing} Bob Bar a}'); |
|
83 | - $this->assertEquals($expected, $this->getLogs()); |
|
84 | - } |
|
85 | - |
|
86 | - public function testObjectCastToString() |
|
87 | - { |
|
88 | - if (method_exists($this, 'createPartialMock')) { |
|
89 | - $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
90 | - } else { |
|
91 | - $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
92 | - } |
|
93 | - $dummy->expects($this->once()) |
|
94 | - ->method('__toString') |
|
95 | - ->will($this->returnValue('DUMMY')); |
|
96 | - |
|
97 | - $this->getLogger()->warning($dummy); |
|
98 | - |
|
99 | - $expected = array('warning DUMMY'); |
|
100 | - $this->assertEquals($expected, $this->getLogs()); |
|
101 | - } |
|
102 | - |
|
103 | - public function testContextCanContainAnything() |
|
104 | - { |
|
105 | - $closed = fopen('php://memory', 'r'); |
|
106 | - fclose($closed); |
|
107 | - |
|
108 | - $context = array( |
|
109 | - 'bool' => true, |
|
110 | - 'null' => null, |
|
111 | - 'string' => 'Foo', |
|
112 | - 'int' => 0, |
|
113 | - 'float' => 0.5, |
|
114 | - 'nested' => array('with object' => new DummyTest), |
|
115 | - 'object' => new \DateTime, |
|
116 | - 'resource' => fopen('php://memory', 'r'), |
|
117 | - 'closed' => $closed, |
|
118 | - ); |
|
119 | - |
|
120 | - $this->getLogger()->warning('Crazy context data', $context); |
|
121 | - |
|
122 | - $expected = array('warning Crazy context data'); |
|
123 | - $this->assertEquals($expected, $this->getLogs()); |
|
124 | - } |
|
125 | - |
|
126 | - public function testContextExceptionKeyCanBeExceptionOrOtherValues() |
|
127 | - { |
|
128 | - $logger = $this->getLogger(); |
|
129 | - $logger->warning('Random message', array('exception' => 'oops')); |
|
130 | - $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); |
|
131 | - |
|
132 | - $expected = array( |
|
133 | - 'warning Random message', |
|
134 | - 'critical Uncaught Exception!' |
|
135 | - ); |
|
136 | - $this->assertEquals($expected, $this->getLogs()); |
|
137 | - } |
|
17 | + /** |
|
18 | + * @return LoggerInterface |
|
19 | + */ |
|
20 | + abstract public function getLogger(); |
|
21 | + |
|
22 | + /** |
|
23 | + * This must return the log messages in order. |
|
24 | + * |
|
25 | + * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>". |
|
26 | + * |
|
27 | + * Example ->error('Foo') would yield "error Foo". |
|
28 | + * |
|
29 | + * @return string[] |
|
30 | + */ |
|
31 | + abstract public function getLogs(); |
|
32 | + |
|
33 | + public function testImplements() |
|
34 | + { |
|
35 | + $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); |
|
36 | + } |
|
37 | + |
|
38 | + /** |
|
39 | + * @dataProvider provideLevelsAndMessages |
|
40 | + */ |
|
41 | + public function testLogsAtAllLevels($level, $message) |
|
42 | + { |
|
43 | + $logger = $this->getLogger(); |
|
44 | + $logger->{$level}($message, array('user' => 'Bob')); |
|
45 | + $logger->log($level, $message, array('user' => 'Bob')); |
|
46 | + |
|
47 | + $expected = array( |
|
48 | + $level.' message of level '.$level.' with context: Bob', |
|
49 | + $level.' message of level '.$level.' with context: Bob', |
|
50 | + ); |
|
51 | + $this->assertEquals($expected, $this->getLogs()); |
|
52 | + } |
|
53 | + |
|
54 | + public function provideLevelsAndMessages() |
|
55 | + { |
|
56 | + return array( |
|
57 | + LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), |
|
58 | + LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), |
|
59 | + LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), |
|
60 | + LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), |
|
61 | + LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), |
|
62 | + LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), |
|
63 | + LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), |
|
64 | + LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), |
|
65 | + ); |
|
66 | + } |
|
67 | + |
|
68 | + /** |
|
69 | + * @expectedException \Psr\Log\InvalidArgumentException |
|
70 | + */ |
|
71 | + public function testThrowsOnInvalidLevel() |
|
72 | + { |
|
73 | + $logger = $this->getLogger(); |
|
74 | + $logger->log('invalid level', 'Foo'); |
|
75 | + } |
|
76 | + |
|
77 | + public function testContextReplacement() |
|
78 | + { |
|
79 | + $logger = $this->getLogger(); |
|
80 | + $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); |
|
81 | + |
|
82 | + $expected = array('info {Message {nothing} Bob Bar a}'); |
|
83 | + $this->assertEquals($expected, $this->getLogs()); |
|
84 | + } |
|
85 | + |
|
86 | + public function testObjectCastToString() |
|
87 | + { |
|
88 | + if (method_exists($this, 'createPartialMock')) { |
|
89 | + $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
90 | + } else { |
|
91 | + $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
92 | + } |
|
93 | + $dummy->expects($this->once()) |
|
94 | + ->method('__toString') |
|
95 | + ->will($this->returnValue('DUMMY')); |
|
96 | + |
|
97 | + $this->getLogger()->warning($dummy); |
|
98 | + |
|
99 | + $expected = array('warning DUMMY'); |
|
100 | + $this->assertEquals($expected, $this->getLogs()); |
|
101 | + } |
|
102 | + |
|
103 | + public function testContextCanContainAnything() |
|
104 | + { |
|
105 | + $closed = fopen('php://memory', 'r'); |
|
106 | + fclose($closed); |
|
107 | + |
|
108 | + $context = array( |
|
109 | + 'bool' => true, |
|
110 | + 'null' => null, |
|
111 | + 'string' => 'Foo', |
|
112 | + 'int' => 0, |
|
113 | + 'float' => 0.5, |
|
114 | + 'nested' => array('with object' => new DummyTest), |
|
115 | + 'object' => new \DateTime, |
|
116 | + 'resource' => fopen('php://memory', 'r'), |
|
117 | + 'closed' => $closed, |
|
118 | + ); |
|
119 | + |
|
120 | + $this->getLogger()->warning('Crazy context data', $context); |
|
121 | + |
|
122 | + $expected = array('warning Crazy context data'); |
|
123 | + $this->assertEquals($expected, $this->getLogs()); |
|
124 | + } |
|
125 | + |
|
126 | + public function testContextExceptionKeyCanBeExceptionOrOtherValues() |
|
127 | + { |
|
128 | + $logger = $this->getLogger(); |
|
129 | + $logger->warning('Random message', array('exception' => 'oops')); |
|
130 | + $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); |
|
131 | + |
|
132 | + $expected = array( |
|
133 | + 'warning Random message', |
|
134 | + 'critical Uncaught Exception!' |
|
135 | + ); |
|
136 | + $this->assertEquals($expected, $this->getLogs()); |
|
137 | + } |
|
138 | 138 | } |
@@ -19,107 +19,107 @@ |
||
19 | 19 | */ |
20 | 20 | interface LoggerInterface |
21 | 21 | { |
22 | - /** |
|
23 | - * System is unusable. |
|
24 | - * |
|
25 | - * @param string $message |
|
26 | - * @param mixed[] $context |
|
27 | - * |
|
28 | - * @return void |
|
29 | - */ |
|
30 | - public function emergency($message, array $context = array()); |
|
22 | + /** |
|
23 | + * System is unusable. |
|
24 | + * |
|
25 | + * @param string $message |
|
26 | + * @param mixed[] $context |
|
27 | + * |
|
28 | + * @return void |
|
29 | + */ |
|
30 | + public function emergency($message, array $context = array()); |
|
31 | 31 | |
32 | - /** |
|
33 | - * Action must be taken immediately. |
|
34 | - * |
|
35 | - * Example: Entire website down, database unavailable, etc. This should |
|
36 | - * trigger the SMS alerts and wake you up. |
|
37 | - * |
|
38 | - * @param string $message |
|
39 | - * @param mixed[] $context |
|
40 | - * |
|
41 | - * @return void |
|
42 | - */ |
|
43 | - public function alert($message, array $context = array()); |
|
32 | + /** |
|
33 | + * Action must be taken immediately. |
|
34 | + * |
|
35 | + * Example: Entire website down, database unavailable, etc. This should |
|
36 | + * trigger the SMS alerts and wake you up. |
|
37 | + * |
|
38 | + * @param string $message |
|
39 | + * @param mixed[] $context |
|
40 | + * |
|
41 | + * @return void |
|
42 | + */ |
|
43 | + public function alert($message, array $context = array()); |
|
44 | 44 | |
45 | - /** |
|
46 | - * Critical conditions. |
|
47 | - * |
|
48 | - * Example: Application component unavailable, unexpected exception. |
|
49 | - * |
|
50 | - * @param string $message |
|
51 | - * @param mixed[] $context |
|
52 | - * |
|
53 | - * @return void |
|
54 | - */ |
|
55 | - public function critical($message, array $context = array()); |
|
45 | + /** |
|
46 | + * Critical conditions. |
|
47 | + * |
|
48 | + * Example: Application component unavailable, unexpected exception. |
|
49 | + * |
|
50 | + * @param string $message |
|
51 | + * @param mixed[] $context |
|
52 | + * |
|
53 | + * @return void |
|
54 | + */ |
|
55 | + public function critical($message, array $context = array()); |
|
56 | 56 | |
57 | - /** |
|
58 | - * Runtime errors that do not require immediate action but should typically |
|
59 | - * be logged and monitored. |
|
60 | - * |
|
61 | - * @param string $message |
|
62 | - * @param mixed[] $context |
|
63 | - * |
|
64 | - * @return void |
|
65 | - */ |
|
66 | - public function error($message, array $context = array()); |
|
57 | + /** |
|
58 | + * Runtime errors that do not require immediate action but should typically |
|
59 | + * be logged and monitored. |
|
60 | + * |
|
61 | + * @param string $message |
|
62 | + * @param mixed[] $context |
|
63 | + * |
|
64 | + * @return void |
|
65 | + */ |
|
66 | + public function error($message, array $context = array()); |
|
67 | 67 | |
68 | - /** |
|
69 | - * Exceptional occurrences that are not errors. |
|
70 | - * |
|
71 | - * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
72 | - * that are not necessarily wrong. |
|
73 | - * |
|
74 | - * @param string $message |
|
75 | - * @param mixed[] $context |
|
76 | - * |
|
77 | - * @return void |
|
78 | - */ |
|
79 | - public function warning($message, array $context = array()); |
|
68 | + /** |
|
69 | + * Exceptional occurrences that are not errors. |
|
70 | + * |
|
71 | + * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
72 | + * that are not necessarily wrong. |
|
73 | + * |
|
74 | + * @param string $message |
|
75 | + * @param mixed[] $context |
|
76 | + * |
|
77 | + * @return void |
|
78 | + */ |
|
79 | + public function warning($message, array $context = array()); |
|
80 | 80 | |
81 | - /** |
|
82 | - * Normal but significant events. |
|
83 | - * |
|
84 | - * @param string $message |
|
85 | - * @param mixed[] $context |
|
86 | - * |
|
87 | - * @return void |
|
88 | - */ |
|
89 | - public function notice($message, array $context = array()); |
|
81 | + /** |
|
82 | + * Normal but significant events. |
|
83 | + * |
|
84 | + * @param string $message |
|
85 | + * @param mixed[] $context |
|
86 | + * |
|
87 | + * @return void |
|
88 | + */ |
|
89 | + public function notice($message, array $context = array()); |
|
90 | 90 | |
91 | - /** |
|
92 | - * Interesting events. |
|
93 | - * |
|
94 | - * Example: User logs in, SQL logs. |
|
95 | - * |
|
96 | - * @param string $message |
|
97 | - * @param mixed[] $context |
|
98 | - * |
|
99 | - * @return void |
|
100 | - */ |
|
101 | - public function info($message, array $context = array()); |
|
91 | + /** |
|
92 | + * Interesting events. |
|
93 | + * |
|
94 | + * Example: User logs in, SQL logs. |
|
95 | + * |
|
96 | + * @param string $message |
|
97 | + * @param mixed[] $context |
|
98 | + * |
|
99 | + * @return void |
|
100 | + */ |
|
101 | + public function info($message, array $context = array()); |
|
102 | 102 | |
103 | - /** |
|
104 | - * Detailed debug information. |
|
105 | - * |
|
106 | - * @param string $message |
|
107 | - * @param mixed[] $context |
|
108 | - * |
|
109 | - * @return void |
|
110 | - */ |
|
111 | - public function debug($message, array $context = array()); |
|
103 | + /** |
|
104 | + * Detailed debug information. |
|
105 | + * |
|
106 | + * @param string $message |
|
107 | + * @param mixed[] $context |
|
108 | + * |
|
109 | + * @return void |
|
110 | + */ |
|
111 | + public function debug($message, array $context = array()); |
|
112 | 112 | |
113 | - /** |
|
114 | - * Logs with an arbitrary level. |
|
115 | - * |
|
116 | - * @param mixed $level |
|
117 | - * @param string $message |
|
118 | - * @param mixed[] $context |
|
119 | - * |
|
120 | - * @return void |
|
121 | - * |
|
122 | - * @throws \Psr\Log\InvalidArgumentException |
|
123 | - */ |
|
124 | - public function log($level, $message, array $context = array()); |
|
113 | + /** |
|
114 | + * Logs with an arbitrary level. |
|
115 | + * |
|
116 | + * @param mixed $level |
|
117 | + * @param string $message |
|
118 | + * @param mixed[] $context |
|
119 | + * |
|
120 | + * @return void |
|
121 | + * |
|
122 | + * @throws \Psr\Log\InvalidArgumentException |
|
123 | + */ |
|
124 | + public function log($level, $message, array $context = array()); |
|
125 | 125 | } |
@@ -12,39 +12,39 @@ |
||
12 | 12 | use Symfony\Polyfill\Ctype as p; |
13 | 13 | |
14 | 14 | if (\PHP_VERSION_ID >= 80000) { |
15 | - return require __DIR__.'/bootstrap80.php'; |
|
15 | + return require __DIR__.'/bootstrap80.php'; |
|
16 | 16 | } |
17 | 17 | |
18 | 18 | if (!function_exists('ctype_alnum')) { |
19 | - function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } |
|
19 | + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } |
|
20 | 20 | } |
21 | 21 | if (!function_exists('ctype_alpha')) { |
22 | - function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } |
|
22 | + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } |
|
23 | 23 | } |
24 | 24 | if (!function_exists('ctype_cntrl')) { |
25 | - function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } |
|
25 | + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } |
|
26 | 26 | } |
27 | 27 | if (!function_exists('ctype_digit')) { |
28 | - function ctype_digit($text) { return p\Ctype::ctype_digit($text); } |
|
28 | + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } |
|
29 | 29 | } |
30 | 30 | if (!function_exists('ctype_graph')) { |
31 | - function ctype_graph($text) { return p\Ctype::ctype_graph($text); } |
|
31 | + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } |
|
32 | 32 | } |
33 | 33 | if (!function_exists('ctype_lower')) { |
34 | - function ctype_lower($text) { return p\Ctype::ctype_lower($text); } |
|
34 | + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } |
|
35 | 35 | } |
36 | 36 | if (!function_exists('ctype_print')) { |
37 | - function ctype_print($text) { return p\Ctype::ctype_print($text); } |
|
37 | + function ctype_print($text) { return p\Ctype::ctype_print($text); } |
|
38 | 38 | } |
39 | 39 | if (!function_exists('ctype_punct')) { |
40 | - function ctype_punct($text) { return p\Ctype::ctype_punct($text); } |
|
40 | + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } |
|
41 | 41 | } |
42 | 42 | if (!function_exists('ctype_space')) { |
43 | - function ctype_space($text) { return p\Ctype::ctype_space($text); } |
|
43 | + function ctype_space($text) { return p\Ctype::ctype_space($text); } |
|
44 | 44 | } |
45 | 45 | if (!function_exists('ctype_upper')) { |
46 | - function ctype_upper($text) { return p\Ctype::ctype_upper($text); } |
|
46 | + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } |
|
47 | 47 | } |
48 | 48 | if (!function_exists('ctype_xdigit')) { |
49 | - function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } |
|
49 | + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } |
|
50 | 50 | } |
@@ -12,35 +12,35 @@ |
||
12 | 12 | use Symfony\Polyfill\Ctype as p; |
13 | 13 | |
14 | 14 | if (!function_exists('ctype_alnum')) { |
15 | - function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } |
|
15 | + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } |
|
16 | 16 | } |
17 | 17 | if (!function_exists('ctype_alpha')) { |
18 | - function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } |
|
18 | + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } |
|
19 | 19 | } |
20 | 20 | if (!function_exists('ctype_cntrl')) { |
21 | - function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } |
|
21 | + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } |
|
22 | 22 | } |
23 | 23 | if (!function_exists('ctype_digit')) { |
24 | - function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } |
|
24 | + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } |
|
25 | 25 | } |
26 | 26 | if (!function_exists('ctype_graph')) { |
27 | - function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } |
|
27 | + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } |
|
28 | 28 | } |
29 | 29 | if (!function_exists('ctype_lower')) { |
30 | - function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } |
|
30 | + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } |
|
31 | 31 | } |
32 | 32 | if (!function_exists('ctype_print')) { |
33 | - function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } |
|
33 | + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } |
|
34 | 34 | } |
35 | 35 | if (!function_exists('ctype_punct')) { |
36 | - function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } |
|
36 | + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } |
|
37 | 37 | } |
38 | 38 | if (!function_exists('ctype_space')) { |
39 | - function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } |
|
39 | + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } |
|
40 | 40 | } |
41 | 41 | if (!function_exists('ctype_upper')) { |
42 | - function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } |
|
42 | + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } |
|
43 | 43 | } |
44 | 44 | if (!function_exists('ctype_xdigit')) { |
45 | - function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } |
|
45 | + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } |
|
46 | 46 | } |
@@ -20,208 +20,208 @@ |
||
20 | 20 | */ |
21 | 21 | final class Ctype |
22 | 22 | { |
23 | - /** |
|
24 | - * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. |
|
25 | - * |
|
26 | - * @see https://php.net/ctype-alnum |
|
27 | - * |
|
28 | - * @param string|int $text |
|
29 | - * |
|
30 | - * @return bool |
|
31 | - */ |
|
32 | - public static function ctype_alnum($text) |
|
33 | - { |
|
34 | - $text = self::convert_int_to_char_for_ctype($text); |
|
35 | - |
|
36 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); |
|
37 | - } |
|
38 | - |
|
39 | - /** |
|
40 | - * Returns TRUE if every character in text is a letter, FALSE otherwise. |
|
41 | - * |
|
42 | - * @see https://php.net/ctype-alpha |
|
43 | - * |
|
44 | - * @param string|int $text |
|
45 | - * |
|
46 | - * @return bool |
|
47 | - */ |
|
48 | - public static function ctype_alpha($text) |
|
49 | - { |
|
50 | - $text = self::convert_int_to_char_for_ctype($text); |
|
51 | - |
|
52 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); |
|
53 | - } |
|
54 | - |
|
55 | - /** |
|
56 | - * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. |
|
57 | - * |
|
58 | - * @see https://php.net/ctype-cntrl |
|
59 | - * |
|
60 | - * @param string|int $text |
|
61 | - * |
|
62 | - * @return bool |
|
63 | - */ |
|
64 | - public static function ctype_cntrl($text) |
|
65 | - { |
|
66 | - $text = self::convert_int_to_char_for_ctype($text); |
|
67 | - |
|
68 | - return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); |
|
69 | - } |
|
70 | - |
|
71 | - /** |
|
72 | - * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. |
|
73 | - * |
|
74 | - * @see https://php.net/ctype-digit |
|
75 | - * |
|
76 | - * @param string|int $text |
|
77 | - * |
|
78 | - * @return bool |
|
79 | - */ |
|
80 | - public static function ctype_digit($text) |
|
81 | - { |
|
82 | - $text = self::convert_int_to_char_for_ctype($text); |
|
83 | - |
|
84 | - return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); |
|
85 | - } |
|
86 | - |
|
87 | - /** |
|
88 | - * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. |
|
89 | - * |
|
90 | - * @see https://php.net/ctype-graph |
|
91 | - * |
|
92 | - * @param string|int $text |
|
93 | - * |
|
94 | - * @return bool |
|
95 | - */ |
|
96 | - public static function ctype_graph($text) |
|
97 | - { |
|
98 | - $text = self::convert_int_to_char_for_ctype($text); |
|
99 | - |
|
100 | - return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); |
|
101 | - } |
|
102 | - |
|
103 | - /** |
|
104 | - * Returns TRUE if every character in text is a lowercase letter. |
|
105 | - * |
|
106 | - * @see https://php.net/ctype-lower |
|
107 | - * |
|
108 | - * @param string|int $text |
|
109 | - * |
|
110 | - * @return bool |
|
111 | - */ |
|
112 | - public static function ctype_lower($text) |
|
113 | - { |
|
114 | - $text = self::convert_int_to_char_for_ctype($text); |
|
115 | - |
|
116 | - return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. |
|
121 | - * |
|
122 | - * @see https://php.net/ctype-print |
|
123 | - * |
|
124 | - * @param string|int $text |
|
125 | - * |
|
126 | - * @return bool |
|
127 | - */ |
|
128 | - public static function ctype_print($text) |
|
129 | - { |
|
130 | - $text = self::convert_int_to_char_for_ctype($text); |
|
131 | - |
|
132 | - return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); |
|
133 | - } |
|
134 | - |
|
135 | - /** |
|
136 | - * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. |
|
137 | - * |
|
138 | - * @see https://php.net/ctype-punct |
|
139 | - * |
|
140 | - * @param string|int $text |
|
141 | - * |
|
142 | - * @return bool |
|
143 | - */ |
|
144 | - public static function ctype_punct($text) |
|
145 | - { |
|
146 | - $text = self::convert_int_to_char_for_ctype($text); |
|
147 | - |
|
148 | - return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); |
|
149 | - } |
|
150 | - |
|
151 | - /** |
|
152 | - * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. |
|
153 | - * |
|
154 | - * @see https://php.net/ctype-space |
|
155 | - * |
|
156 | - * @param string|int $text |
|
157 | - * |
|
158 | - * @return bool |
|
159 | - */ |
|
160 | - public static function ctype_space($text) |
|
161 | - { |
|
162 | - $text = self::convert_int_to_char_for_ctype($text); |
|
163 | - |
|
164 | - return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); |
|
165 | - } |
|
166 | - |
|
167 | - /** |
|
168 | - * Returns TRUE if every character in text is an uppercase letter. |
|
169 | - * |
|
170 | - * @see https://php.net/ctype-upper |
|
171 | - * |
|
172 | - * @param string|int $text |
|
173 | - * |
|
174 | - * @return bool |
|
175 | - */ |
|
176 | - public static function ctype_upper($text) |
|
177 | - { |
|
178 | - $text = self::convert_int_to_char_for_ctype($text); |
|
179 | - |
|
180 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); |
|
181 | - } |
|
182 | - |
|
183 | - /** |
|
184 | - * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. |
|
185 | - * |
|
186 | - * @see https://php.net/ctype-xdigit |
|
187 | - * |
|
188 | - * @param string|int $text |
|
189 | - * |
|
190 | - * @return bool |
|
191 | - */ |
|
192 | - public static function ctype_xdigit($text) |
|
193 | - { |
|
194 | - $text = self::convert_int_to_char_for_ctype($text); |
|
195 | - |
|
196 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); |
|
197 | - } |
|
198 | - |
|
199 | - /** |
|
200 | - * Converts integers to their char versions according to normal ctype behaviour, if needed. |
|
201 | - * |
|
202 | - * If an integer between -128 and 255 inclusive is provided, |
|
203 | - * it is interpreted as the ASCII value of a single character |
|
204 | - * (negative values have 256 added in order to allow characters in the Extended ASCII range). |
|
205 | - * Any other integer is interpreted as a string containing the decimal digits of the integer. |
|
206 | - * |
|
207 | - * @param string|int $int |
|
208 | - * |
|
209 | - * @return mixed |
|
210 | - */ |
|
211 | - private static function convert_int_to_char_for_ctype($int) |
|
212 | - { |
|
213 | - if (!\is_int($int)) { |
|
214 | - return $int; |
|
215 | - } |
|
216 | - |
|
217 | - if ($int < -128 || $int > 255) { |
|
218 | - return (string) $int; |
|
219 | - } |
|
220 | - |
|
221 | - if ($int < 0) { |
|
222 | - $int += 256; |
|
223 | - } |
|
224 | - |
|
225 | - return \chr($int); |
|
226 | - } |
|
23 | + /** |
|
24 | + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. |
|
25 | + * |
|
26 | + * @see https://php.net/ctype-alnum |
|
27 | + * |
|
28 | + * @param string|int $text |
|
29 | + * |
|
30 | + * @return bool |
|
31 | + */ |
|
32 | + public static function ctype_alnum($text) |
|
33 | + { |
|
34 | + $text = self::convert_int_to_char_for_ctype($text); |
|
35 | + |
|
36 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); |
|
37 | + } |
|
38 | + |
|
39 | + /** |
|
40 | + * Returns TRUE if every character in text is a letter, FALSE otherwise. |
|
41 | + * |
|
42 | + * @see https://php.net/ctype-alpha |
|
43 | + * |
|
44 | + * @param string|int $text |
|
45 | + * |
|
46 | + * @return bool |
|
47 | + */ |
|
48 | + public static function ctype_alpha($text) |
|
49 | + { |
|
50 | + $text = self::convert_int_to_char_for_ctype($text); |
|
51 | + |
|
52 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); |
|
53 | + } |
|
54 | + |
|
55 | + /** |
|
56 | + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. |
|
57 | + * |
|
58 | + * @see https://php.net/ctype-cntrl |
|
59 | + * |
|
60 | + * @param string|int $text |
|
61 | + * |
|
62 | + * @return bool |
|
63 | + */ |
|
64 | + public static function ctype_cntrl($text) |
|
65 | + { |
|
66 | + $text = self::convert_int_to_char_for_ctype($text); |
|
67 | + |
|
68 | + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); |
|
69 | + } |
|
70 | + |
|
71 | + /** |
|
72 | + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. |
|
73 | + * |
|
74 | + * @see https://php.net/ctype-digit |
|
75 | + * |
|
76 | + * @param string|int $text |
|
77 | + * |
|
78 | + * @return bool |
|
79 | + */ |
|
80 | + public static function ctype_digit($text) |
|
81 | + { |
|
82 | + $text = self::convert_int_to_char_for_ctype($text); |
|
83 | + |
|
84 | + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); |
|
85 | + } |
|
86 | + |
|
87 | + /** |
|
88 | + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. |
|
89 | + * |
|
90 | + * @see https://php.net/ctype-graph |
|
91 | + * |
|
92 | + * @param string|int $text |
|
93 | + * |
|
94 | + * @return bool |
|
95 | + */ |
|
96 | + public static function ctype_graph($text) |
|
97 | + { |
|
98 | + $text = self::convert_int_to_char_for_ctype($text); |
|
99 | + |
|
100 | + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); |
|
101 | + } |
|
102 | + |
|
103 | + /** |
|
104 | + * Returns TRUE if every character in text is a lowercase letter. |
|
105 | + * |
|
106 | + * @see https://php.net/ctype-lower |
|
107 | + * |
|
108 | + * @param string|int $text |
|
109 | + * |
|
110 | + * @return bool |
|
111 | + */ |
|
112 | + public static function ctype_lower($text) |
|
113 | + { |
|
114 | + $text = self::convert_int_to_char_for_ctype($text); |
|
115 | + |
|
116 | + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. |
|
121 | + * |
|
122 | + * @see https://php.net/ctype-print |
|
123 | + * |
|
124 | + * @param string|int $text |
|
125 | + * |
|
126 | + * @return bool |
|
127 | + */ |
|
128 | + public static function ctype_print($text) |
|
129 | + { |
|
130 | + $text = self::convert_int_to_char_for_ctype($text); |
|
131 | + |
|
132 | + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); |
|
133 | + } |
|
134 | + |
|
135 | + /** |
|
136 | + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. |
|
137 | + * |
|
138 | + * @see https://php.net/ctype-punct |
|
139 | + * |
|
140 | + * @param string|int $text |
|
141 | + * |
|
142 | + * @return bool |
|
143 | + */ |
|
144 | + public static function ctype_punct($text) |
|
145 | + { |
|
146 | + $text = self::convert_int_to_char_for_ctype($text); |
|
147 | + |
|
148 | + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); |
|
149 | + } |
|
150 | + |
|
151 | + /** |
|
152 | + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. |
|
153 | + * |
|
154 | + * @see https://php.net/ctype-space |
|
155 | + * |
|
156 | + * @param string|int $text |
|
157 | + * |
|
158 | + * @return bool |
|
159 | + */ |
|
160 | + public static function ctype_space($text) |
|
161 | + { |
|
162 | + $text = self::convert_int_to_char_for_ctype($text); |
|
163 | + |
|
164 | + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); |
|
165 | + } |
|
166 | + |
|
167 | + /** |
|
168 | + * Returns TRUE if every character in text is an uppercase letter. |
|
169 | + * |
|
170 | + * @see https://php.net/ctype-upper |
|
171 | + * |
|
172 | + * @param string|int $text |
|
173 | + * |
|
174 | + * @return bool |
|
175 | + */ |
|
176 | + public static function ctype_upper($text) |
|
177 | + { |
|
178 | + $text = self::convert_int_to_char_for_ctype($text); |
|
179 | + |
|
180 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); |
|
181 | + } |
|
182 | + |
|
183 | + /** |
|
184 | + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. |
|
185 | + * |
|
186 | + * @see https://php.net/ctype-xdigit |
|
187 | + * |
|
188 | + * @param string|int $text |
|
189 | + * |
|
190 | + * @return bool |
|
191 | + */ |
|
192 | + public static function ctype_xdigit($text) |
|
193 | + { |
|
194 | + $text = self::convert_int_to_char_for_ctype($text); |
|
195 | + |
|
196 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); |
|
197 | + } |
|
198 | + |
|
199 | + /** |
|
200 | + * Converts integers to their char versions according to normal ctype behaviour, if needed. |
|
201 | + * |
|
202 | + * If an integer between -128 and 255 inclusive is provided, |
|
203 | + * it is interpreted as the ASCII value of a single character |
|
204 | + * (negative values have 256 added in order to allow characters in the Extended ASCII range). |
|
205 | + * Any other integer is interpreted as a string containing the decimal digits of the integer. |
|
206 | + * |
|
207 | + * @param string|int $int |
|
208 | + * |
|
209 | + * @return mixed |
|
210 | + */ |
|
211 | + private static function convert_int_to_char_for_ctype($int) |
|
212 | + { |
|
213 | + if (!\is_int($int)) { |
|
214 | + return $int; |
|
215 | + } |
|
216 | + |
|
217 | + if ($int < -128 || $int > 255) { |
|
218 | + return (string) $int; |
|
219 | + } |
|
220 | + |
|
221 | + if ($int < 0) { |
|
222 | + $int += 256; |
|
223 | + } |
|
224 | + |
|
225 | + return \chr($int); |
|
226 | + } |
|
227 | 227 | } |