diff options
| -rw-r--r-- | framework/Web/UI/TTemplateControl.php | 4 | ||||
| -rw-r--r-- | framework/core.php | 124 | 
2 files changed, 126 insertions, 2 deletions
| diff --git a/framework/Web/UI/TTemplateControl.php b/framework/Web/UI/TTemplateControl.php index 2f63ae5e..971f0288 100644 --- a/framework/Web/UI/TTemplateControl.php +++ b/framework/Web/UI/TTemplateControl.php @@ -32,11 +32,11 @@ class TTemplateControl extends TControl implements INamingContainer  	/**
  	 * @var ITemplate the parsed template structure shared by the same control class
  	 */
 -	protected static $_template=array();
 +	private static $_template=array();
  	/**
  	 * @var ITemplate the parsed template structure specific for this control instance
  	 */
 -	protected $_localTemplate=null;
 +	private $_localTemplate=null;
  	/**
  	 * @var TTemplateControl the master control if any
  	 */
 diff --git a/framework/core.php b/framework/core.php index 77841fb2..6f7d081d 100644 --- a/framework/core.php +++ b/framework/core.php @@ -361,6 +361,117 @@ abstract class TService extends TApplicationComponent implements IService  }
  /**
 + * TVarDumper class.
 + *
 + * TVarDumper is intended to replace the buggy PHP function var_dump and print_r.
 + * It can correctly identify the recursively referenced objects in a complex
 + * object structure. It also has a recurisve depth control to avoid indefinite
 + * recursive display of some peculiar variables.
 + *
 + * TVarDumper can be used as follows,
 + * <code>
 + *   echo TVarDumper::dump($var);
 + * </code>
 + *
 + * @author Qiang Xue <qiang.xue@gmail.com>
 + * @version $Revision: $  $Date: $
 + * @package System
 + * @since 3.0
 + */
 +class TVarDumper
 +{
 +	private static $_objects;
 +	private static $_output;
 +	private static $_depth;
 +
 +	/**
 +	 * Converts a variable into a string representation.
 +	 * This method achieves the similar functionality as var_dump and print_r
 +	 * but is more robust when handling complex objects such as PRADO controls.
 +	 * @param mixed variable to be dumped
 +	 * @param integer maximum depth that the dumper should go into the variable. Defaults to 10.
 +	 * @return string the string representation of the variable
 +	 */
 +	public static function dump($var,$depth=10)
 +	{
 +		self::$_output='';
 +		self::$_objects=array();
 +		self::$_depth=$depth;
 +		self::dumpInternal($var,0);
 +		return self::$_output;
 +	}
 +
 +	private static function dumpInternal($var,$level)
 +	{
 +		switch(gettype($var))
 +		{
 +			case 'boolean':
 +				self::$_output.=$var?'true':'false';
 +				break;
 +			case 'integer':
 +				self::$_output.="$var";
 +				break;
 +			case 'double':
 +				self::$_output.="$var";
 +				break;
 +			case 'string':
 +				self::$_output.="'$var'";
 +				break;
 +			case 'resource':
 +				self::$_output.='{resource}';
 +				break;
 +			case 'NULL':
 +				self::$_output.="null";
 +				break;
 +			case 'unknown type':
 +				self::$_output.='{unknown}';
 +				break;
 +			case 'array':
 +				if(self::$_depth<=$level)
 +					self::$_output.='array(...)';
 +				else if(empty($var))
 +					self::$_output.='array()';
 +				else
 +				{
 +					$keys=array_keys($var);
 +					$spaces=str_repeat(' ',$level*4);
 +					self::$_output.="array\n".$spaces.'(';
 +					foreach($keys as $key)
 +					{
 +						self::$_output.="\n".$spaces."    [$key] => ";
 +						self::$_output.=self::dumpInternal($var[$key],$level+1);
 +					}
 +					self::$_output.="\n".$spaces.')';
 +				}
 +				break;
 +			case 'object':
 +				if(($id=array_search($var,self::$_objects,true))!==false)
 +					self::$_output.=get_class($var).'#'.($id+1).'(...)';
 +				else if(self::$_depth<=$level)
 +					self::$_output.=get_class($var).'(...)';
 +				else
 +				{
 +					$id=array_push(self::$_objects,$var);
 +					$className=get_class($var);
 +					$members=(array)$var;
 +					$keys=array_keys($members);
 +					$spaces=str_repeat(' ',$level*4);
 +					self::$_output.="$className#$id\n".$spaces.'(';
 +					foreach($keys as $key)
 +					{
 +						$keyDisplay=strtr(trim($key),array("\0"=>':'));
 +						self::$_output.="\n".$spaces."    [$keyDisplay] => ";
 +						self::$_output.=self::dumpInternal($members[$key],$level+1);
 +					}
 +					self::$_output.="\n".$spaces.')';
 +				}
 +				break;
 +		}
 +	}
 +}
 +
 +
 +/**
   * PradoBase class.
   *
   * PradoBase implements a few fundamental static methods.
 @@ -838,6 +949,19 @@ class PradoBase  			self::$_logger=new TLogger;
  		return self::$_logger;
  	}
 +
 +	/**
 +	 * Converts a variable into a string representation.
 +	 * This method achieves the similar functionality as var_dump and print_r
 +	 * but is more robust when handling complex objects such as PRADO controls.
 +	 * @param mixed variable to be dumped
 +	 * @param integer maximum depth that the dumper should go into the variable. Defaults to 10.
 +	 * @return string the string representation of the variable
 +	 */
 +	public static function varDump($var,$depth=10)
 +	{
 +		return TVarDumper::dump($var,$depth);
 +	}
  }
  /**
 | 
