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项目。 –