protected function dumpObject($value) { $length = count($value); $g = 255 - min(10 + 10 * $this->getLevel(), 255); $bg = 255 - min(120 + 10 * $this->getLevel(), 255); $tg = 255 - min(160 + 10 * $this->getLevel(), 255); $color = "rgb( {$g}, 255, {$g} )"; $borderColor = "rgb( {$bg}, 120, {$bg} )"; $textColor = "rgb( {$tg}, 160, {$tg} )"; $div = new Manipulator('div'); $table = $div->div->strong->setText("Object")->parent->small->setText('(Class: ' . get_class($value) . ')')->parent->parent->table; $table->tableCols(['Property', 'Value']); $ref = new \ReflectionClass(get_class($value)); $classes = [$ref]; $parent = $ref; $firstParent = null; while ($parent = $parent->getParentClass()) { if (!$firstParent) { $firstParent = $parent; } $classes[] = $parent; } $tbody = $table->tbody; foreach ($classes as $classRef) { foreach ($classRef->getProperties() as $prop) { $tr = $table->append('tr'); $prop->setAccessible(true); $tr->append('td')->append('small')->setText($prop->isStatic() ? '::' : '->')->parent->append('strong')->setText($prop->getName())->parent->append('small')->setText('(' . $classRef->getName() . ')')->parent->parent->append('td')->setText($this->dumpMixed($prop->getValue($value))); } } $div->setCss(['border' => "1px solid {$borderColor}", 'background' => $color, 'padding' => '10px', 'font-family' => 'monospace', 'font-size' => '14px', 'display' => 'inline-block', 'vertical-align' => 'top']); $div->find('strong, th')->setCss(['color' => $textColor]); $div->table->setCss(['border-collapse' => 'collapse', 'width' => '100%']); $div->find('td')->setCss(['vertical-align' => 'top']); $div->find('td, th')->setCss(['border' => "1px solid {$borderColor}", 'padding' => '3px']); return $div->getString(); }
/** * @param bool|false $withOutput * * @return Manipulator */ public function generateHtml($withOutput = false) { $th = ['Name/ID', 'Execution Time', 'Total Execution Time', 'Memory', 'Total Memory', 'Memory Peak', 'Avg. Memory Peak', 'Real Memory', 'Total Real Memory', 'Real Memory Peak', 'Avg. Real Memory Peak']; $m = new Manipulator('div'); $tbl = $m->setCss(['font-family' => 'monospace', 'font-size' => '8px', 'color' => '#333'])->table->tableCols($th); foreach ($this->_records as $record) { $fromStart = $record->getAbsoluteResult(); $fromLast = $record->getResult(); if (!$fromLast) { $fromLast = $fromStart; } $tr = $tbl->append('tr'); $tr->append('th')->setText($record->getName()); foreach ([$fromLast->getTime(), $fromStart->getTime()] as $time) { $time = $time * 1000; $tr->append('td')->append('label[title="' . $time . ' ms"]')->setText(StringUtil::timify($time)); } foreach ([$fromLast->getMemoryUsage(), $fromStart->getMemoryUsage(), $fromLast->getMemoryUsagePeak(), $fromStart->getMemoryUsagePeak(), $fromLast->getRealMemoryUsage(), $fromStart->getRealMemoryUsage(), $fromLast->getRealMemoryUsagePeak(), $fromStart->getRealMemoryUsagePeak()] as $bytes) { $tr->append('td')->append('label[title="' . $bytes . ' Byte"]')->setText(StringUtil::bytify($bytes)); } } $m->find('table')->setCss(['width' => '100%']); $m->find('td, th')->setCss(['border' => '1px solid #ccc']); $m->find('td')->setCss(['text-align' => 'right']); $m->find('tr:even, tbody th')->setCss(['background' => '#efefef']); return $m; }