* @copyright 2017 Microsoft Corporation * @license https://github.com/azure/azure-storage-php/LICENSE * @link https://github.com/azure/azure-storage-php */ namespace MicrosoftAzure\Storage\Common\Middlewares; /** * This class provides the stack that handles the logic of applying each * middlewares to the request or the response. * * @category Microsoft * @package MicrosoftAzure\Storage\Common\Middlewares * @author Azure Storage PHP SDK * @copyright 2017 Microsoft Corporation * @license https://github.com/azure/azure-storage-php/LICENSE * @link https://github.com/azure/azure-storage-php */ class MiddlewareStack { private $middlewares = array(); /** * Push the given middleware into the middleware stack. * * @param IMiddleware|callable $middleware The middleware to be pushed. * * @return void */ public function push($middleware) { array_unshift($this->middlewares, $middleware); } /** * Apply the middlewares to the handler. * * @param callable $handler the handler to which the middleware applies. * * @return callable */ public function apply(callable $handler) { $result = $handler; foreach ($this->middlewares as $middleware) { $result = $middleware($result); } return $result; } }