Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
tipuloidea
/
back
/
vendor
/
php-debugbar
/
php-debugbar
/
src
/
DebugBar
/
DataCollector
:
ObjectCountCollector.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace DebugBar\DataCollector; use DebugBar\DataCollector\DataCollector; use DebugBar\DataCollector\DataCollectorInterface; use DebugBar\DataCollector\Renderable; /** * Collector for hit counts. */ class ObjectCountCollector extends DataCollector implements DataCollectorInterface, Renderable { /** @var string */ private $name; /** @var string */ private $icon; /** @var int */ protected $classCount = 0; /** @var array */ protected $classList = []; /** @var array */ protected $classSummary = []; /** @var bool */ protected $collectSummary = false; /** @var array */ protected $keyMap = ['value' => 'Count']; /** * @param string $name * @param string $icon */ public function __construct($name = 'counter', $icon = 'cubes') { $this->name = $name; $this->icon = $icon; } /** * Allows to define an array to map internal keys to human-readable labels */ public function setKeyMap(array $keyMap) { $this->keyMap = $keyMap; } /** * Allows to add a summary row */ public function collectCountSummary(bool $enable = true) { $this->collectSummary = $enable; } /** * @param string|mixed $class * @param int $count * @param string $key */ public function countClass($class, $count = 1, $key = 'value') { if (! is_string($class)) { $class = get_class($class); } if (!isset($this->classList[$class])) { $this->classList[$class] = []; } if ($this->collectSummary) { $this->classSummary[$key] = ($this->classSummary[$key] ?? 0) + $count; } $this->classList[$class][$key] = ($this->classList[$class][$key] ?? 0) + $count; $this->classCount += $count; } /** * {@inheritDoc} */ public function collect() { uasort($this->classList, fn($a, $b) => array_sum($b) <=> array_sum($a)); $collect = [ 'data' => $this->classList, 'count' => $this->classCount, 'key_map' => $this->keyMap, 'is_counter' => true ]; if ($this->collectSummary) { $collect['badges'] = $this->classSummary; } if (! $this->getXdebugLinkTemplate()) { return $collect; } foreach ($this->classList as $class => $count) { $reflector = class_exists($class) ? new \ReflectionClass($class) : null; if ($reflector && $link = $this->getXdebugLink($reflector->getFileName())) { $collect['data'][$class]['xdebug_link'] = $link; } } return $collect; } /** * {@inheritDoc} */ public function getName() { return $this->name; } /** * {@inheritDoc} */ public function getWidgets() { $name = $this->getName(); return [ "$name" => [ 'icon' => $this->icon, 'widget' => 'PhpDebugBar.Widgets.TableVariableListWidget', 'map' => "$name", 'default' => '{}' ], "$name:badge" => [ 'map' => "$name.count", 'default' => 0 ] ]; } }