Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Класс для получения и вывода информации о переменных (korchasa)
Author Message
korchasa
Участник форума



Joined: 08 Jun 2006
Posts: 30
Карма: 0
   поощрить/наказать


PostPosted: Thu Oct 26, 2006 3:26 pm (написано за 2 минуты 18 секунд)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
<?php
/*
class Varier{
    /*
    function _get($var, $name = 'INFO',$tmpl) {
        $type = gettype (www.php.net/gettype)($var);
        switch ($type) {
            default:
                $out = $tmpl['value'].$var.$tmpl['/value'];
                break;
            case 'boolean':
                $out = $tmpl['value'].(($var)? 'true' : 'false').$tmpl['/value'];
                break;
            case 'string':
                $out = $tmpl['size'].strlen($var).$tmpl['/size'].$tmpl['value'].htmlspecialchars($var).$tmpl['/value'];
                break;
            case 'array':
                $values = Varier::_getSection($var,$tmpl,'+');
                $out = $tmpl['size'].count($var).$tmpl['/size']
                .$values;
                break;
            case 'object':
                $class = get_class (www.php.net/get_class)($var);
                $properties = Varier::_getSection(get_object_vars (www.php.net/get_object_vars)($var),$tmpl,'properties');
                $methods = Varier::_getSection(get_class_methods (www.php.net/get_class_methods)($class),$tmpl,'methods');
                $out  = $tmpl['class_name'].$class.$tmpl['/class_name']
                .$tmpl['properties'].$properties.$tmpl['/properties']
                .$tmpl['methods'].$methods.$tmpl['/methods'];
                break;
        }
        return $tmpl['element'].$tmpl['name'].$name.$tmpl['/name'].$tmpl['type'].$type.$tmpl['/type'].$out.$tmpl['/element'];
    }
   
    /*
    function _getSection($childs,$tmpl,$name = '+') {
        if(count (www.php.net/count)($childs)) {
            $child_txt = '';
            foreach($childs as $cname=>$cvalue) {
                $child_txt .= Varier::_get($cvalue,$cname,$tmpl);
            }
            $child_txt = call_user_func (www.php.net/call_user_func)(array (www.php.net/array)('Varier',$tmpl['section_decorator']),$name,$child_txt);
            return $child_txt;
        }
    }
    /*
    function _getSectionXml($name,$text) {
        return $text;
    }
   
    /*
    function _getSectionHtml($name,$text) {
        $id = 'id'.round(rand (www.php.net/rand)());
        return "<a name=\"anchor_".$id."\" href=\"#\" onClick=\"javascript: var el = document.getElementById('".$id."');if(el.style.display=='none'){el.style.display='';}else{el.style.display='none';}; return false;\">".$name."</a>
        <blockquote>
            <div style=\"display:none;padding-left:10px;width:auto;\" id=\""
.$id."\">".$text."</div>
        </blockquote>"
;
    } 
   
    function getXml($var, $name = 'INFO') {
        $tmpl['element'] = "<element>";
        $tmpl['/element'] = "</element>\n";
        $tmpl['size'] = "<size>";
        $tmpl['/size'] = "</size>\n";
        $tmpl['type'] = "<type>";
        $tmpl['/type'] = "</type>\n";
        $tmpl['name'] = "<name>";
        $tmpl['/name'] = "</name>\n";
        $tmpl['value'] = "<value>";
        $tmpl['/value'] = "</value>";
        $tmpl['elements'] = "<elements>";
        $tmpl['/elements'] = "</elements>\n";
        $tmpl['class_name'] = '<class_name>';
        $tmpl['/class_name'] = "</class_name>\n";
        $tmpl['properties'] = "<properties>";
        $tmpl['/properties'] = "</properties>\n";
        $tmpl['property'] = '<property>';
        $tmpl['/property'] = '</property>';
        $tmpl['methods'] = '<methods>';
        $tmpl['/methods'] = '</methods>';
        $tmpl['method'] = '<method>';
        $tmpl['/method'] = '</method>';
        $tmpl['section_decorator'] = '_getSectionXml';
        return Varier::_get($var,$name,$tmpl);
    }
   
    /*
    function getHtml($var,$name = 'INFO')  {
        $tmpl['element'] = '<li>';
        $tmpl['/element'] = "</li>\n";
        $tmpl['size'] = '<em>[';
        $tmpl['/size'] = ']</em> ';
        $tmpl['type'] = '<em>';
        $tmpl['/type'] = '</em> ';
        $tmpl['name'] = '<strong>';
        $tmpl['/name'] = '</strong> ';
        $tmpl['value'] = '';
        $tmpl['/value'] = '';
        $tmpl['elements'] = '<ul style="list-style-type:none">';
        $tmpl['/elements'] = "</ul>\n";
        $tmpl['class_name'] = '<em>(';
        $tmpl['/class_name'] = ')</em>';
        $tmpl['properties'] = '<ul style="list-style-type:none">';
        $tmpl['/properties'] = "</ul>\n";
        $tmpl['property'] = '<li>';
        $tmpl['/property'] = "</li>\n";
        $tmpl['methods'] = '<ul style="list-style-type:none">';
        $tmpl['/methods'] = "</ul>\n";
        $tmpl['method'] = '<li>';
        $tmpl['/method'] = "</li>\n";
        $tmpl['section_decorator'] = '_getSectionHtml';
        return Varier::_get($var,$name,$tmpl);
    }
}

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

$test = new TestClass();
$a = array (www.php.net/array)(1=>$test,2=>'foo','bar'=>true);

echo (www.php.net/echo) Varier::getXml($a);
echo (www.php.net/echo) Varier::getHtml($a,'example');
Использует шаблоны для указания оформления отчета (есть XML и HTML)
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Oct 26, 2006 6:20 pm (спустя 2 часа 53 минуты; написано за 25 секунд)
   Post subject:
Reply with quote

обсуждение здесь: Класс для получения и вывода информации о переменных (обсуждение) (forum.dklab.ru/php/heap/KlassDlyaPolucheniyaIVivodaInformatsiiOPeremennihObsugdenie.html)
Back to top
View user's profile Send private message
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Wed Dec 20, 2006 6:41 pm (спустя 1 месяц 25 дней 20 минут; написано за 20 секунд)
   Post subject:
Reply with quote

Мама, не горюй!
Чем printr не нравится?
Back to top
View user's profile Send private message
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Sat Dec 23, 2006 9:41 pm (спустя 3 дня 3 часа 4 секунды; написано за 30 секунд)
   Post subject:
Reply with quote

Еще в книге Д.Котерова приводился неплохой пример ОДНОЙ функции -- dumper(). Мне ее вполне достаточно.
Back to top
View user's profile Send private message
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Mon Feb 05, 2007 4:27 am (спустя 1 месяц 12 дней 6 часов 46 минут; написано за 3 минуты 13 секунд)
   Post subject:
Reply with quote

Константин Жинько [tIT], притнр неугодил тем, что:
1. пишет плейн-текстом, что обычно решают прописыванием тэгов pre.
2. в случае больших массивов данных - получается гигантский текст в котором сам чёрт ногу сломит. я это решил раскрытием массива/объекта при щелчке.
3. нерасширябельна. а ведь иногда полезно иметь функцию дампа, которая учитывает используемую объектную модель и выдающую дополнительную информацию.
Back to top
View user's profile Send private message
leonard
Заглянувший



Joined: 05 Feb 2007
Posts: 2
Карма: 0
   поощрить/наказать

Location: Kiev

PostPosted: Mon Feb 05, 2007 7:17 pm (спустя 14 часов 49 минут; написано за 20 секунд)
   Post subject:
Reply with quote

Этот пример уже приводился в книге.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML