Revision 148 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?php/** This file is part of Psy Shell.** (c) 2012-2023 Justin Hileman** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace Psy\Command\ListCommand;use Psy\Formatter\SignatureFormatter;use Psy\Input\FilterOptions;use Psy\Util\Mirror;use Psy\VarDumper\Presenter;use Symfony\Component\Console\Input\InputInterface;/*** Abstract Enumerator class.*/abstract class Enumerator{// Output stylesconst IS_PUBLIC = 'public';const IS_PROTECTED = 'protected';const IS_PRIVATE = 'private';const IS_GLOBAL = 'global';const IS_CONSTANT = 'const';const IS_CLASS = 'class';const IS_FUNCTION = 'function';private $filter;private $presenter;/*** Enumerator constructor.** @param Presenter $presenter*/public function __construct(Presenter $presenter){$this->filter = new FilterOptions();$this->presenter = $presenter;}/*** Return a list of categorized things with the given input options and target.** @param InputInterface $input* @param \Reflector|null $reflector* @param mixed $target** @return array*/public function enumerate(InputInterface $input, \Reflector $reflector = null, $target = null): array{$this->filter->bind($input);return $this->listItems($input, $reflector, $target);}/*** Enumerate specific items with the given input options and target.** Implementing classes should return an array of arrays:** [* 'Constants' => [* 'FOO' => [* 'name' => 'FOO',* 'style' => 'public',* 'value' => '123',* ],* ],* ]** @param InputInterface $input* @param \Reflector|null $reflector* @param mixed $target** @return array*/abstract protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null): array;protected function showItem($name){return $this->filter->match($name);}protected function presentRef($value){return $this->presenter->presentRef($value);}protected function presentSignature($target){// This might get weird if the signature is actually for a reflector. Hrm.if (!$target instanceof \Reflector) {$target = Mirror::get($target);}return SignatureFormatter::format($target);}}