×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: Hendrik Hamming
Added: Oct 31, 2016 1:41 PM
Views: 15
Tags: debug
  1. <?php
  2.  
  3. /**
  4.  * debug view function
  5.  *
  6.  * @author Hendrik Hamming <hendrik@madscripter.eu>
  7.  *
  8.  * @param type $var
  9.  * @param string $label
  10.  * @return type
  11.  */
  12. function debug($var, $label = false){
  13.         echo '<pre style="border:1px solid #222; padding: 5px;max-width: 800px;margin: 40px 20px;">';
  14.                 $debug = DEBUG::i($var, $label);
  15.        
  16.         echo '<span style="border-bottom:1px solid #777;display:block; padding: 4px;font-style:italic; margin-bottom:10px;">'.$debug->getLabel().'</span>';
  17.         echo '<div style="">';
  18.        
  19.         if (is_null($var)|| is_int($var)||  is_bool($var) || $var == ''){
  20.                 var_dump($var);
  21.         } else {
  22.                 print_r($var);
  23.         }
  24.         echo '</div>';
  25.        
  26.         echo '<span style="font-style:italic; border-top: 1px solid #777; padding: 4px; margin-top: 10px;display:block;font-size: 12px;">' . $debug->footer .'</span>';
  27.         echo "</pre>";
  28. }
  29.  
  30. class DEBUG {
  31.         private static $instance = false;
  32.         private static $instances = array();
  33.         private $label = array();
  34.         public static $counter = 0;
  35.         private $var;
  36.         private $file;
  37.         public $footer = '';
  38.         private $contents;
  39.         private $backtrace;
  40.        
  41.         public function __construct($var, $label = false) {
  42.                 $this->var = $var;
  43.                 $this->parse_backtrace();
  44.                 $this->setLabel($label);
  45.                 $this->setFooter();
  46.         }
  47.        
  48.         private function parse_backtrace (){
  49.                 $b = debug_backtrace();
  50.                 $this->backtrace = $b;
  51.                 $this->file = new stdClass();
  52.                 $this->file->path = str_replace(__DIR__.'/', '', $b[3]['file']);
  53.                 $this->file->line = $b[3]['line'];
  54.                
  55.                 $line = trim(file($b[3]['file'])[$b[3]['line']-1]);
  56.                
  57.                 preg_match_all('/debug\(([^\)]+)\)/', $line, $matches);
  58.                 $this->contents = $matches[1][DEBUG::$counter-1];
  59.                 if(count($matches[1])==DEBUG::$counter){
  60.                         DEBUG::reset ();
  61.                 }
  62.         }
  63.        
  64.         private function setLabel ($label = false){
  65.                 if(isset($this->backtrace[4])){
  66.                         if( isset($this->backtrace[4]['class'])){
  67.                                 $this->label[] = '<b>Class:</b> ' . $this->backtrace[4]['class'] . '';
  68.                         }
  69.                         if(isset($this->backtrace[4]['function'])){
  70.                                 $this->label[] = '<b>Function:</b> ' . $this->backtrace[4]['function'];
  71.                         }
  72.                 }
  73.                 if(!preg_match('/^\'|^"/', substr($this->contents,0,1))){
  74.                         $this->label[] = '<b>Var:</b> ' . $this->contents;
  75.                 }
  76.                 if($label ){
  77.                         $this->label[] = $label;
  78.                 }
  79.         }
  80.        
  81.         public function getLabel (){
  82.                 return join($this->label, ' ');
  83.         }
  84.        
  85.         private function setFooter (){
  86.                 $this->footer = $this->file->path . ' Line: ' . $this->file->line;
  87.         }
  88.        
  89.         private static function reset(){
  90.                 self::$instances = array();
  91.                 self::$counter =0;
  92.         }
  93.        
  94.         public static function getInstances(){
  95.                 return self::$instances;
  96.         }
  97.         public static function countInstances(){
  98.                 return count(self::$instances);
  99.         }
  100.        
  101.         public static function i($var, $label = false){
  102.                
  103.                 self::$counter++;
  104.                 self::$instance = new DEBUG($var, $label);
  105.                 self::$instances[] = self::$instance;
  106.                
  107.                 return self::$instance;
  108.         }
  109.        
  110. }