Эта тема на forum.dklab.ru


korchasa:
<?php
/**
* Файл содержит утилиты класс Varier. Класс отвечает за получение и вывод
* информации о переменных
* @author Stanislav Korchagin aka Scum <korchasa@gmail.com>
* @copyright (C) Stanislav Korchagin aka Scum
* @access public
* @version 0.1a
* @package tools
* @todo
* написать замену для show_var без прямого вывода в поток
*/

class Varier{
/**
* Возвращает дамп переменной в HTML. Рекурсивная
* @param mixed $var переменная
* @param string[optional] $name название переменной
*/
function getHtml($var, $name = 'INFO') {
$out ='';
$info = '';
$type = gettype($var);
switch ($type) {
default:
$out .= $var.'<br />';
break;

case 'boolean':
$out .= ($var)? 'true' : 'false';
$out .= '<br />';
break;

case 'string':
$out .= "<i>[".strlen($var)."]</i> \"".htmlspecialchars($var)."\"<br />";
break;

case 'array':
foreach($var as $item_name=>$item_value)
$info .= self::getHtml($item_value,$item_name);
$out .= "<i>[".count($var)."]</i> ";
if(count($var))
$out .= self::_getPopupHtml('+',$info);
else
$out .= '<br />';
break;

case 'object':
if(sizeof(get_object_vars($var))) {
$text = '';
foreach (get_object_vars($var) as $var_name=>$var_value)
$text .= self::getHtml($var_value,$var_name);
$info .= self::_getPopupHtml('vars',$text);
}

$class_name = get_class($var);
if(sizeof(get_class_methods($class_name))) {
$text = '';
foreach (get_class_methods($class_name) as $method)
$text .= $method.'()<br />';
$info .= self::_getPopupHtml('methods',$text);
}

$out .= "<i>($class_name)</i> ".self::_getPopupHtml('+',$info);
break;
}
return "<b>$name</b> <i>$type</i> ".$out."\n";
}

function showVar($var, $name = 'INFO') {
echo self::getHtml($var,$name);
}

/**
* Формирует html-код для отображения поп-апа.
*
* @param string $name имя окна
* @param string $text текст
* @return string
*/
function _getPopupHtml($name,$text) {
$out = '';
$id = 'id'.round(rand());
$out .= "<a name=\"anchor_".$id."\" href=\"#anchor_".$id."\" onClick=\"javascript: var el = document.getElementById('".$id."');if(el.style.display=='none'){el.style.display='';}else{el.style.display='none';}\">".$name."</a><br>";
$out .= "<blockquote>";
$out .= "<div style=\"display:none;border:thin dashed #090;padding-left:10px;width:auto;\" id=\"".$id."\">";
$out .= $text;
$out .= "</div>";
$out .= "</blockquote>";
return $out;
}

/**
* Возвращает дамп переменной в XML. Рекурсивная
* @param mixed $var переменная
* @param string[optional] $name название переменной
*/
function getXml($var, $name = 'INFO') {
$type = gettype($var);
$out = "<var>\n";
$out .= "<name>".$name."</name>";
$out .= "<type>".$type."</type>";
$info = '';
switch ($type) {
default:
$out .= "<value>".$var."</value>\n";
break;

case 'boolean':
$out .= "<value>".($var)?'true':'false'."</value>\n";
break;

case 'string':
$out .= "<value lenght=\"".strlen($var)."\">".htmlspecialchars($var)."</value>\n";
break;

case 'array':
foreach($var as $item_name=>$item_value)
$info .= self::getXml($item_value,$item_name);
$out .= "<value size=\"".count($var)."\">";
if(count($var))
$out .= $info;
$out .= "</value>\n";
break;

case 'object':
$class_name = get_class($var);
$out .= "<class_name>".$class_name."</class_name>";

if(sizeof(get_object_vars($var))) {
$out .= "<properties>";
foreach (get_object_vars($var) as $var_name=>$var_value)
$out .= "<property>\n".self::getXml($var_value,$var_name)."</property>";
$out .= "</properties>\n";
}


if(sizeof(get_class_methods($class_name))) {
$out .= "<methods>";
foreach (get_class_methods($class_name) as $method)
$out .= "<method>".$method."()</method>";
$out .= "</methods>\n";
}

//$out .= "<i>($class_name)</i> ".self::_getPopupHtml('+',$info);
break;
}
return $out."</var>\n";
}

}

/*Пример использования */

class TestClass {
var $arr = array('foo'=>'bar',2=>1);
var $boo = true;
function fooFunction() {}
function barFunction(){}
}

$test = new TestClass();
$a = array(1=>$test,2=>'foo','bar'=>true);

echo Varier::getHtml($a);


Вот под утро родилось...наверняка косяков много, ибо уже голова не варит...
dinoel:
korchasa
php5 only (self::...) а зачем? :)
Maus:
В силу http://forum.dklab.ru/viewtopic.php?t=9862
выделено из темы «Отладочные функции»,
расположенной в форуме Склад готовых решений :: PHP (09 Июня 2006, 09:20).
Maus:
наверняка косяков много, ибо уже голова не варит...
раз так - этому не место в "Готовых решениях"
korchasa:
кМодераторам:
Нельзя ли сменить хозяина сообщения с гостя на меня? А то я его править не могу? Ну или ветку удалить, чтобы, неоконченным решением, людей в заблуждение не вводить.
Maus:
korchasa
Вы сначала создайте Готовое решение (отвечающее правилам соотвествующего форума) - а там видно будет.
Maus:
Ветка выделена в отдельную тему «Класс для получения и вывода информации о переменных»,
расположенную в форуме Склад готовых решений :: PHP (26 Октября 2006, 19:20).

Эта тема на forum.dklab.ru