Возможно, это на самом деле не отвечает на вопрос, но вы можете добавить параметр get (), указывающий тип. тогда вы можете позвонить
BaseModel::get('User', 1);
вместо вызова User :: get (). Вы можете добавить логику в BaseModel :: get (), чтобы проверить, существует ли метод get в подклассе, и затем вызвать его, если вы хотите, чтобы подкласс переопределил его.
В противном случае единственный способ, который я могу придумать, очевидно, это добавить материал в каждый подкласс, что глупо:
class BaseModel {
public static function get() {
$args = func_get_args();
$className = array_shift($args);
//do stuff
echo $className;
print_r($args);
}
}
class User extends BaseModel {
public static function get() {
$params = func_get_args();
array_unshift($params, __CLASS__);
return call_user_func_array( array(get_parent_class(__CLASS__), 'get'), $params);
}
}
User::get(1);
Это, вероятно, сломалось бы, если бы вы затем подклассировали пользователя, но я полагаю, вы могли бы заменить get_parent_class(__CLASS__)
на 'BaseModel'
в этом случае