123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- /**
- * Debugging tools.
- *
- * This file gives a developer a set of tools useful for performing code
- * consistency checks. This includes scoping code blocks to ensure that
- * only the interesting iteration of a loop gets outputted, a paint()
- * function that acts like var_dump() with pre tags, and conditional
- * printing.
- */
- /*
- TODO
- * Integrate into SimpleTest so it tells us whether or not there were any
- not cleaned up debug calls.
- * Custom var_dump() that ignores blacklisted properties
- * DEPRECATE AND REMOVE ALL CALLS!
- */
- /**#@+
- * Convenience global functions. Corresponds to method on Debugger.
- */
- function paint($mixed) {
- $Debugger =& Debugger::instance();
- return $Debugger->paint($mixed);
- }
- function paintIf($mixed, $conditional) {
- $Debugger =& Debugger::instance();
- return $Debugger->paintIf($mixed, $conditional);
- }
- function paintWhen($mixed, $scopes = array()) {
- $Debugger =& Debugger::instance();
- return $Debugger->paintWhen($mixed, $scopes);
- }
- function paintIfWhen($mixed, $conditional, $scopes = array()) {
- $Debugger =& Debugger::instance();
- return $Debugger->paintIfWhen($mixed, $conditional, $scopes);
- }
- function addScope($id = false) {
- $Debugger =& Debugger::instance();
- return $Debugger->addScope($id);
- }
- function removeScope($id) {
- $Debugger =& Debugger::instance();
- return $Debugger->removeScope($id);
- }
- function resetScopes() {
- $Debugger =& Debugger::instance();
- return $Debugger->resetScopes();
- }
- function isInScopes($array = array()) {
- $Debugger =& Debugger::instance();
- return $Debugger->isInScopes($array);
- }
- /**#@-*/
- /**
- * The debugging singleton. Most interesting stuff happens here.
- */
- class Debugger
- {
- public $shouldPaint = false;
- public $paints = 0;
- public $current_scopes = array();
- public $scope_nextID = 1;
- public $add_pre = true;
- public function Debugger() {
- $this->add_pre = !extension_loaded('xdebug');
- }
- public static function &instance() {
- static $soleInstance = false;
- if (!$soleInstance) $soleInstance = new Debugger();
- return $soleInstance;
- }
- public function paintIf($mixed, $conditional) {
- if (!$conditional) return;
- $this->paint($mixed);
- }
- public function paintWhen($mixed, $scopes = array()) {
- if (!$this->isInScopes($scopes)) return;
- $this->paint($mixed);
- }
- public function paintIfWhen($mixed, $conditional, $scopes = array()) {
- if (!$conditional) return;
- if (!$this->isInScopes($scopes)) return;
- $this->paint($mixed);
- }
- public function paint($mixed) {
- $this->paints++;
- if($this->add_pre) echo '<pre>';
- var_dump($mixed);
- if($this->add_pre) echo '</pre>';
- }
- public function addScope($id = false) {
- if ($id == false) {
- $id = $this->scope_nextID++;
- }
- $this->current_scopes[$id] = true;
- }
- public function removeScope($id) {
- if (isset($this->current_scopes[$id])) unset($this->current_scopes[$id]);
- }
- public function resetScopes() {
- $this->current_scopes = array();
- $this->scope_nextID = 1;
- }
- public function isInScopes($scopes = array()) {
- if (empty($this->current_scopes)) {
- return false;
- }
- if (!is_array($scopes)) {
- $scopes = array($scopes);
- }
- foreach ($scopes as $scope_id) {
- if (empty($this->current_scopes[$scope_id])) {
- return false;
- }
- }
- if (empty($scopes)) {
- if ($this->scope_nextID == 1) {
- return false;
- }
- for($i = 1; $i < $this->scope_nextID; $i++) {
- if (empty($this->current_scopes[$i])) {
- return false;
- }
- }
- }
- return true;
- }
- }
- // vim: et sw=4 sts=4
|