2016-11-25 6 views
3

私はOOPの原則に厳密に従っている約5つのタスクを同時に実行する機能を持っています。誰も私がそれを打ち明けることができますか?特別に他の関数で関数を呼び出すのは、私のための一種のトリッキーです。PHP:単一のタスクで関数を関数に分割する?

public function status(){ 
     $client = new Client(); 
     $notification=Notification::where('active',1)->get(); 
     $status = Status::where('name', 'health')->first(); 
     $default_frequency = 1; 

     foreach ($notification as $note) { 
      $status_health = $note->status('health'); 

      $check_frequency = isset($note->check_frequency) ? intval($note->check_frequency) : $default_frequency; 

      $date = \Carbon\Carbon::parse($status_health['timestamp']); 
      $elapsed_time = $date->diffInMinutes(); 

      if($elapsed_time < $check_frequency){ 
       continue; 
      } 

      $response = $client->get($note->website_url, ['http_errors' => false]); 
      $resCode = $response->getStatusCode(); 

      $note->statuses()->attach($status,['values'=> $resCode === 200 ? 'up' : 'down']); 
     } 
    } 
+2

5つのタスクを明確にしてくださいあなたは別の方法にしたいと思うし、誰かがあなたを助けるかもしれない – RiggsFolly

+0

はい。このクラスはとても重要なので、私は別のクラスの関数を繰り返し呼び出すでしょう。それで私は今、それを休止したいのです。 –

+0

はい私は知っているが**このコードでは5つの新しいメソッドに分解したいと考える5つのタスクのリストを提供する**私は5つの別々のタスクを見ないので私は明らかに愚かであり、あなたの援助が必要である – RiggsFolly

答えて

0

コードをあまりに細かく修正する必要はありません。私が正しく理解していれば、特定の間隔で通知のステータスを更新しようとしています。

この二つのタスクに侵入することができます

  1. は、ここではいくつかの基準

に基づいて、各通知のステータスが私である各そのうちの一つ

  • Updateを通じてすべての通知およびループの取得

    Class YourClass { 
    
        const DEFAULT_FREQUENCY = 1; 
    
        private $client; 
    
        public function __construct(Client $clinet) 
        { 
         $this->client = $clinet; 
        } 
    
        public function status() 
        { 
         $notifications = Notification::where('active', 1)->get(); 
         $status = Status::where('name', 'health')->first(); 
    
         foreach ($notification as $notification) { 
          $this->updateStatus($notification, $status); 
         } 
        } 
    
        private function updateStatus(Notification $notification, Status $status) 
        { 
         $status_health = $notification->status('health'); 
    
         $frequency = $this->getFrequency($notification); 
    
         $elapsed_time = \Carbon\Carbon::parse($status_health['timestamp'])->diffInMinutes(); 
    
         if ($elapsed_time >= $frequency) { 
          $response = $this->client->get($notification->website_url, ['http_errors' => false]); 
          $notification->statuses()->attach($status, [ 
           'values'=> $response->getStatusCode() === 200 ? 'up' : 'down' 
          ]); 
         } 
        } 
    
        private function getFrequency(Notification $notification) 
        { 
         return isset($notification->check_frequency) 
          ? intval($notification->check_frequency) 
          : self::DEFAULT_FREQUENCY; 
        } 
    } 
    
  • +0

    tnxに応答します。私はそれが私のために働く場合、私はそれを読んで試して....それを感謝します –

    +0

    は期待どおり完全に動作します!私が本当にこのクラスを返そうとしているのは、レスポンスコードが200でなければ、別のクラスで呼び出さなければならないということです。私にヒントや助けを与えることができれば? –

    +0

    クラスコンストラクタに他のクラスを挿入することができます( 'Client'クラスで行ったのと同様)。それで、$レスポンスコードをチェックして200ではない場合は、別のクラスのメソッドを呼び出して(つまり、通知を送信する) –

    関連する問題