Chris@0
|
1 Symfony Debug Extension for PHP 5
|
Chris@0
|
2 =================================
|
Chris@0
|
3
|
Chris@0
|
4 This extension publishes several functions to help building powerful debugging tools.
|
Chris@0
|
5 It is compatible with PHP 5.3, 5.4, 5.5 and 5.6; with ZTS and non-ZTS modes.
|
Chris@0
|
6 It is not required thus not provided for PHP 7.
|
Chris@0
|
7
|
Chris@0
|
8 symfony_zval_info()
|
Chris@0
|
9 -------------------
|
Chris@0
|
10
|
Chris@0
|
11 - exposes zval_hash/refcounts, allowing e.g. efficient exploration of arbitrary structures in PHP,
|
Chris@0
|
12 - does work with references, preventing memory copying.
|
Chris@0
|
13
|
Chris@0
|
14 Its behavior is about the same as:
|
Chris@0
|
15
|
Chris@0
|
16 ```php
|
Chris@0
|
17 <?php
|
Chris@0
|
18
|
Chris@0
|
19 function symfony_zval_info($key, $array, $options = 0)
|
Chris@0
|
20 {
|
Chris@0
|
21
|
Chris@0
|
22 // $options is currently not used, but could be in future version.
|
Chris@0
|
23
|
Chris@0
|
24 if (!array_key_exists($key, $array)) {
|
Chris@0
|
25 return null;
|
Chris@0
|
26 }
|
Chris@0
|
27
|
Chris@17
|
28 $info = [
|
Chris@0
|
29 'type' => gettype($array[$key]),
|
Chris@0
|
30 'zval_hash' => /* hashed memory address of $array[$key] */,
|
Chris@0
|
31 'zval_refcount' => /* internal zval refcount of $array[$key] */,
|
Chris@0
|
32 'zval_isref' => /* is_ref status of $array[$key] */,
|
Chris@17
|
33 ];
|
Chris@0
|
34
|
Chris@0
|
35 switch ($info['type']) {
|
Chris@0
|
36 case 'object':
|
Chris@17
|
37 $info += [
|
Chris@0
|
38 'object_class' => get_class($array[$key]),
|
Chris@0
|
39 'object_refcount' => /* internal object refcount of $array[$key] */,
|
Chris@0
|
40 'object_hash' => spl_object_hash($array[$key]),
|
Chris@0
|
41 'object_handle' => /* internal object handle $array[$key] */,
|
Chris@17
|
42 ];
|
Chris@0
|
43 break;
|
Chris@0
|
44
|
Chris@0
|
45 case 'resource':
|
Chris@17
|
46 $info += [
|
Chris@0
|
47 'resource_handle' => (int) $array[$key],
|
Chris@0
|
48 'resource_type' => get_resource_type($array[$key]),
|
Chris@0
|
49 'resource_refcount' => /* internal resource refcount of $array[$key] */,
|
Chris@17
|
50 ];
|
Chris@0
|
51 break;
|
Chris@0
|
52
|
Chris@0
|
53 case 'array':
|
Chris@17
|
54 $info += [
|
Chris@0
|
55 'array_count' => count($array[$key]),
|
Chris@17
|
56 ];
|
Chris@0
|
57 break;
|
Chris@0
|
58
|
Chris@0
|
59 case 'string':
|
Chris@17
|
60 $info += [
|
Chris@0
|
61 'strlen' => strlen($array[$key]),
|
Chris@17
|
62 ];
|
Chris@0
|
63 break;
|
Chris@0
|
64 }
|
Chris@0
|
65
|
Chris@0
|
66 return $info;
|
Chris@0
|
67 }
|
Chris@0
|
68 ```
|
Chris@0
|
69
|
Chris@0
|
70 symfony_debug_backtrace()
|
Chris@0
|
71 -------------------------
|
Chris@0
|
72
|
Chris@0
|
73 This function works like debug_backtrace(), except that it can fetch the full backtrace in case of fatal errors:
|
Chris@0
|
74
|
Chris@0
|
75 ```php
|
Chris@0
|
76 function foo() { fatal(); }
|
Chris@0
|
77 function bar() { foo(); }
|
Chris@0
|
78
|
Chris@0
|
79 function sd() { var_dump(symfony_debug_backtrace()); }
|
Chris@0
|
80
|
Chris@0
|
81 register_shutdown_function('sd');
|
Chris@0
|
82
|
Chris@0
|
83 bar();
|
Chris@0
|
84
|
Chris@0
|
85 /* Will output
|
Chris@0
|
86 Fatal error: Call to undefined function fatal() in foo.php on line 42
|
Chris@0
|
87 array(3) {
|
Chris@0
|
88 [0]=>
|
Chris@0
|
89 array(2) {
|
Chris@0
|
90 ["function"]=>
|
Chris@0
|
91 string(2) "sd"
|
Chris@0
|
92 ["args"]=>
|
Chris@0
|
93 array(0) {
|
Chris@0
|
94 }
|
Chris@0
|
95 }
|
Chris@0
|
96 [1]=>
|
Chris@0
|
97 array(4) {
|
Chris@0
|
98 ["file"]=>
|
Chris@0
|
99 string(7) "foo.php"
|
Chris@0
|
100 ["line"]=>
|
Chris@0
|
101 int(1)
|
Chris@0
|
102 ["function"]=>
|
Chris@0
|
103 string(3) "foo"
|
Chris@0
|
104 ["args"]=>
|
Chris@0
|
105 array(0) {
|
Chris@0
|
106 }
|
Chris@0
|
107 }
|
Chris@0
|
108 [2]=>
|
Chris@0
|
109 array(4) {
|
Chris@0
|
110 ["file"]=>
|
Chris@0
|
111 string(102) "foo.php"
|
Chris@0
|
112 ["line"]=>
|
Chris@0
|
113 int(2)
|
Chris@0
|
114 ["function"]=>
|
Chris@0
|
115 string(3) "bar"
|
Chris@0
|
116 ["args"]=>
|
Chris@0
|
117 array(0) {
|
Chris@0
|
118 }
|
Chris@0
|
119 }
|
Chris@0
|
120 }
|
Chris@0
|
121 */
|
Chris@0
|
122 ```
|
Chris@0
|
123
|
Chris@0
|
124 Usage
|
Chris@0
|
125 -----
|
Chris@0
|
126
|
Chris@0
|
127 To enable the extension from source, run:
|
Chris@0
|
128
|
Chris@0
|
129 ```
|
Chris@0
|
130 phpize
|
Chris@0
|
131 ./configure
|
Chris@0
|
132 make
|
Chris@0
|
133 sudo make install
|
Chris@0
|
134 ```
|