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;
}
...
}
PSR-1:基本編碼標準建議 「類名必須在StudlyCaps聲明」所以你應該刪除de下劃線。 – SandroMarques
@SandroMarques感謝您的評論,但是,像這樣的類名是[WordPress的命名約定](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions) 。我會考慮非WP項目。 –