<?php namespace Ratchet\Resource\Command; use Ratchet\Application\ApplicationInterface; class Composite extends \SplQueue implements CommandInterface { /** * Add another Command to the stack * Unlike a true composite the enqueue flattens a composite parameter into leafs * @param CommandInterface */ public function enqueue(CommandInterface $command = null) { if ($command instanceof self) { foreach ($command as $cmd) { $this->enqueue($cmd); } return; } if (null !== $command) { parent::enqueue($command); } } public function execute(ApplicationInterface $scope = null) { $this->setIteratorMode(static::IT_MODE_DELETE); $recursive = new self; foreach ($this as $command) { $recursive->enqueue($command->execute($scope)); } if (count($recursive) > 0) { return $recursive; } } }