Я создаю приложение, где клиент предоставляет $_GET['task']
который ограничен list
, detail
, или же edit
и в ответ сервер предоставит список доступных записей для всех идентификаторов, запись для $_GET['id']
или форма для редактирования записи $_GET['id']
соответственно.
Я хотел бы, чтобы строка, предоставленная клиентом, напрямую соответствовала методу в определенном объекте и не должна была отображать его как одноразовый, чтобы я и другие не запутались.
Все работает хорошо, кроме list
как это зарезервированное слово.
Что такое хорошая синонимия для «списка» как для обычного пользователя (так как они увидят его в URL), так и для разработчиков (поскольку они должны заставить его работать)?
Ну, во-первых, прямое разоблачение ваших методов класса, вероятно, не лучший способ настроить вещи. Что касается списка, являющегося зарезервированным словом, зачем ограничивать себя, не используя API.
В какой-то момент в вашем приложении вам понадобится немного логики, верно. Так почему бы не просто
switch( $_GET['mode'] ){
case 'list':
do something
break;
}
На самом деле лучше использовать константу класса, для этого, как
Class::MODE_LIST = 'list';
Кроме того, если вы действительно хотите назвать его список, вы можете использовать __call
вот так.
class API {
const MODE_LIST = 'list';
const MODE_TASK = 'task';
const MODE_EDIT = 'edit';
public function __call($method, $args){
switch($method){
case self::MODE_LIST:
return $this->_list( $args );
break;
case self::MODE_TASK:
break;
case self::MODE_EDIT:
break;
default:
///error -- do some error reporting.
}
}
protected function _list( $args ){
}
}
$API = new API();
$API->{$_GET['mode']}();
Других решений пока нет …