annotate vendor/symfony/debug/Resources/ext/README.md @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 ```