标签:laravel
<?php namespace Illuminate\Console\Scheduling; use LogicException; use InvalidArgumentException; use Illuminate\Contracts\Container\Container; // namespace to use class CallbackEvent extends Event { /** * The callback to call. * * @var string */ protected $callback;// The callback function, a instance to be call /** * The parameters to pass to the method. * * @var array */ protected $parameters; // The parameters to pass to the method. /** * Create a new event instance. * * @param string $callback * @param array $parameters * @return void * * @throws \InvalidArgumentException */ public function __construct($callback, array $parameters = [])// Create a new event instance. { $this->callback = $callback;// set method name , call callback function $this->parameters = $parameters;// set variable, that is the parameters. if (! is_string($this->callback) && ! is_callable($this->callback)) {// if has something wrong throw new InvalidArgumentException( ‘Invalid scheduled callback event. Must be string or callable.‘ ); } }// a callback event be done like a class or a object /** * Run the given event. * * @param \Illuminate\Contracts\Container\Container $container * @return mixed * * @throws \Exception */ public function run(Container $container)// run the normal or right event method {// parameter is Container if ($this->description) { touch($this->mutexPath());// edit something attr }// more time no description try { $response = $container->call($this->callback, $this->parameters); } finally { $this->removeMutex(); }// try do something , or remove parent::callAfterCallbacks($container); return $response; } /** * Remove the mutex file from disk. * * @return void */ protected function removeMutex() { if ($this->description) { @unlink($this->mutexPath()); } }// a wrong or /** * Do not allow the event to overlap each other. * * @return $this * * @throws \LogicException */ public function withoutOverlapping() { if (! isset($this->description)) { throw new LogicException( "A scheduled event name is required to prevent overlapping. Use the ‘name‘ method before ‘withoutOverlapping‘." ); } return $this->skip(function () { return file_exists($this->mutexPath()); }); }// a over loop /** * Get the mutex path for the scheduled command. * * @return string */ protected function mutexPath() { return storage_path(‘framework/schedule-‘.sha1($this->description)); }// get the file path /** * Get the summary of the event for display. * * @return string */ public function getSummaryForDisplay() { if (is_string($this->description)) { return $this->description; } return is_string($this->callback) ? $this->callback : ‘Closure‘; }// Get the summary of the event for display. }
本文出自 “专注php” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1761651
标签:laravel
原文地址:http://jingshanls.blog.51cto.com/3357095/1761651