====== PHP RFC: __debugInfo() ====== * Version: 1.1 * Date: 2014-01-21 * Author: Sara Golemon, pollita@php.net * Status: Accepted (implemented in 5.6) * First Published at: http://wiki.php.net/rfc/debug-info ===== Proposal ===== This RFC is for exposing the "get_debug_info" API already available to internal classes (written in C) to PHP classes via a magic method called __debugInfo(). Example Usage: class File { // "Resource(stream)" isn't all that useful private $fp; // But all the stream meta data is public function __debugInfo() { return $this->fp ? stream_get_meta_data($fp) : []; } public function open($filename, $mode = 'r'){ $this->fp = fopen($filename, $mode); } } $f = new File; var_dump($f); // object(File)#1 { } $f->open('http://php.net'); var_dump($f); /* object(File)#1 { ["wrapper_type"]=> string(4) "http" ["stream_type"]=> string(10) "tcp_socket" etc... */ ===== Backward Incompatible Changes ===== Double underscore is a reserved namespace, so any classes which happen to implement this are the ones which need to change. ===== Impact to Existing Extensions ===== Existing fallback behavior for internal classes not overriding get_debug_info is preserved via chaining to get_properties when no __debugInfo function is defined. ===== Proposed PHP Version(s) ===== 5.next ===== Alternates under discussion ===== * Rather than use __debugInfo() as the whole property info result, either merge it with the properties table or stuff it into a "__debugInfo" property and return it with the full properties table. IMO, this takes control away from the user and removes a particularly useful reason for having the __debugInfo() magic method in the first place. Consider an object which points at itself (or more likely, another object which points back at the original). This normally results in a recursive loop. This is detected by the var_dump() routine, but only after a couple cycles. A more intelligent __debugInfo() output could avoid any iterations of the loop. ===== Potential expansions of scope ===== * Add ReflectionObject::getDebugInfo() to return the result of zend_object_handlers->get_debug_info as an array of ReflectionParameter objects ===== Revision History ===== * 1.1 (2014-01-22) - Changed name from __debug_info to __debugInfo and added alternates/expansion headings * 1.0 (2014-01-21) - Initial Revision ===== Vote 1 ===== * Vote start: 2014/02/03 * Vote end: 2014/02/17 Vote [YES] to merge the __debugInfo() patch. See Vote 2 for options on what name it will have. * Yes (5.6) * Yes (5.7) * No ===== Vote 2 ===== * Vote start: 2014/02/03 * Vote end: 2014/02/17 If Vote 1 passes, what should the userland magic method be called? * __debugInfo() * __debug() ===== Implementation ===== https://github.com/sgolemon/php-src/compare/debug.info