2016-07-16 65 views
1

我使用了兩個類:Points和Populate_Fields。點類有不同的點干將看起來像這些:PHP OOP:一種更好的方法可以在另一個類中訪問

class Points { 
    public function get_state_points($user_id) { 
    return $this->calculate_state_points($user_id); 
    } 

    public function get_region_points($user_id) { 
    return $this->calculate_region_points($user_id); 
    } 
    ... 
} 

而且Populate_Fields類使用這些方法來填充字段:

class Populate_Fields extends Points { 
    private function populate_state_point_value($field) { 
     $user_id = \thermal\User_Data::get_edited_user_id(); 

     if(! empty($user_id)) { 
      $state_points = $this->get_state_points($user_id); 
      $field['value'] = $state_points; 

      update_user_meta($user_id, 'state_point_value', $state_points); 
     } 

     return $field; 
    } 

    private function populate_region_point_value($field) { 
     $user_id = \thermal\User_Data::get_edited_user_id(); 
     $region_points = $this->get_region_points($user_id); 

     update_user_meta($user_id, 'region_point_value', $region_points); 

     $field['value'] = $region_points; 

     return $field; 
    } 
} 

正如你所看到的,目前Populate_Fields類擴展點使這些方法在$ this下可用。但是,我不確定擴展是否是一個很好的做法:將Populate_Fields設置爲Points的子項只是因爲它使用了它的方法,這對我來說沒有什麼意義。

我想起了另一件事,是使點類的實例作爲Populate_Fields類的屬性:

class Populate_Fields { 
    private $points; 

    public function __construct() { 
    $this->points = new Points(); 
    } 

    private function populate_state_point_value($field) { 
     $user_id = \thermal\User_Data::get_edited_user_id(); 

     if(! empty($user_id)) { 
      $state_points = $this->points->get_state_points($user_id); 
      $field['value'] = $state_points; 

      update_user_meta($user_id, 'state_point_value', $state_points); 
     } 

     return $field; 
    } 
    ... 
} 

它是一個更好的做法?或者,如果我使用這些方法多在這兩個類,是否有意義,使之靜來代替,而像這樣:

class Points { 
    public static function get_state_points($user_id) { 
     return self::calculate_state_points($user_id); 
    } 
    ... 
} 

class Populate_Fields { 
    private function populate_state_point_value($field) { 
      $user_id = \thermal\User_Data::get_edited_user_id(); 

      if(! empty($user_id)) { 
       $state_points = Points::get_state_points($user_id); 
       $field['value'] = $state_points; 

       update_user_meta($user_id, 'state_point_value', $state_points); 
      } 

      return $field; 
     } 
    ... 
} 
+0

PSR-1:基本編碼標準建議 「類名必須在StudlyCaps聲明」所以你應該刪除de下劃線。 – SandroMarques

+0

@SandroMarques感謝您的評論,但是,像這樣的類名是[WordPress的命名約定](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions) 。我會考慮非WP項目。 –

回答

1

使用「依賴注入」作出要求時,Points實例實例Populate_Fields

class Populate_Fields { 
    private $points; 

    public function __construct(Points $pointsObj) { 
    $this->points = $pointsObj; 
    } 

    private function populate_state_point_value($field) { 
     $user_id = \thermal\User_Data::get_edited_user_id(); 

     if(! empty($user_id)) { 
      $state_points = $this->points->get_state_points($user_id); 
      $field['value'] = $state_points; 

      update_user_meta($user_id, 'state_point_value', $state_points); 
     } 

     return $field; 
    } 
    ... 
} 

http://php-di.org/doc/understanding-di.html

相關問題