【问题标题】:controller class naming convention conflict (php)控制器类命名约定冲突 (php)
【发布时间】:2011-04-14 22:33:55
【问题描述】:

我正在构建一个 MVC 框架。我正在使用 PEAR 命名约定。类将每个单词的首字母大写。

问题是当我进入控制器类时。框架根据 URL 路径加载控制器。但是,我不想在我的 URL 中使用大写字母。有没有通用的方法来处理这个问题?

【问题讨论】:

  • ucfirst()?具体问题是什么?
  • @KingCrunch 如果类超过一个单词,ucfirst 将不符合正确的大写字母。例如,如果控制器类名称是 PhotoBooth
  • 你不应该首先使用大小写混合的文件名。对于对语言语义一无所知的框架设计者来说,这是一种可恶的做法。标识符在 PHP 中应该不区分大小写。
  • @mario 所以你说的是 new PhotoBooth();与 new photobooth() 相同;在所有 php 构建中?
  • 是的。 stdClassStDcLaSS 相同,strtolowerSTRTOLOWER 相同。这是否是一种好的语言设计经常被争论,但 PHP 仍然将它们视为等价的。 (但请注意,常量名称是区分大小写的。当然还有变量。)

标签: php model-view-controller controller naming-conventions


【解决方案1】:

只需从 url 中获取控制器的名称(例如 /controller/action/id)并使用 ucfirst() 获取控制器的类名。这是常见的做法。

【讨论】:

  • ehhh... 如果您的控制器类的名称是 PhotoBooth 怎么办?你不能只用 ucfirst() 来获得正确的案例。
  • 然后您可能希望使用为每个大写字母在 URL 中添加下划线的约定。所以 PhotoBooth 应该是photo_booth/action/..
  • 举个例子:url /photo-booth => implode('', array_map('ucfirst', explode('-', 'photo-booth'))) => class PhotoBooth。字符串转换通常不是那么难,但却是一个很有创意的好游乐场:)
  • 使用了类似于国王卷腹的方法
  • 你可以先使用strtolower()
猜你喜欢
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2020-11-14
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多