为什么要switch在一系列if语句中使用块?
switch 语句似乎做同样的事情,但需要更长的时间来输入.
Laravel有一个<select>表单助手,它将字典作为输入.我喜欢把所有这些的价值保持在一个中心位置.例如,我可能有一个看起来像这样的枚举:
$phoneTypes = [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
];
Run Code Online (Sandbox Code Playgroud)
我想在我的视图/模板和数据库中使用它:
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->enum('pri_phone_type',array_keys($phoneTypes));
...
});
Run Code Online (Sandbox Code Playgroud)
NOTICE!: This question is not a duplicate: I have provided below an alternative and highly useful enumeration method that accomplishes the desired effect - 11/13/2013
typedefPHP中是否有关键字,以便我可以执行以下操作:
typedef struct {
} aStructure;
Run Code Online (Sandbox Code Playgroud)
要么
typedef enum {
aType1,
aType2,
} aType;
Run Code Online (Sandbox Code Playgroud)
编辑
我最终在下面回答了我自己的问题(跳过第一个最近的回答).我创建了一个自定义enum函数,完全满足我的要求,但没有类型定义.
如何在PHP中使用类似Enum的功能(如Java和其他高级语言中提供的那样)?我知道PHP目前不允许你创建枚举,但最接近的是什么?
我看到程序员将大量信息放入数据库中,否则这些数据库可能放在一个包含数组的文件中.他们将使用许多SQL表,而不是数组,我认为这些表更慢.
CitrusDB在数据库中有一个名为"holiday"的表.该表只包含一个名为"holiday_date"的日期列,该日期列包含假日日期.我们的想法是让用户在表格中添加假期.柑橘和我在工作场所工作的程序员更愿意将所有这些信息都放在表格中,因为它是"标准的".
除非您允许用户通过用户界面添加假期,否则我不明白为什么会这样.我感觉有些东西我不见了.
我有一个PHP5对象将消息传递给另一个,并希望为每个消息附加一个类型.例如,MSG_HOT和MSG_WARM,和MSG_COLD.如果PHP5有一个枚举类型,我可能会用它来定义消息类型,但(除非我错了)没有这样的动物.我看了几个选项:
字符串('MSG_HOT','MSG_WARM'和'MSG_COLD')是不好的,因为我不可避免地会输入类似的东西'MSG_WRAM',事情会破裂.数字遇到同样的问题,也不太清楚.
定义工作:
define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);
Run Code Online (Sandbox Code Playgroud)
但污染全局命名空间,因此需要更详细的名称来确保唯一性.我宁愿不让我的代码乱丢东西APPLICATIONNAME_MESSAGES_TYPE_HOT.
最后,我可以使用类名来区分类型,如下所示:
class MessageHot extends Message {}
class MessageWarm extends Message {}
class MessageCold extends Message {}
class Message
{
public function Type()
{
return get_class($this);
}
public function Data()
{
return $this->data;
}
public function __construct($data)
{
$this->data = $data;
}
private $data;
}
Run Code Online (Sandbox Code Playgroud)
我认为这很好,但对于看起来应该是一个简单的概念也是很多工作.
我错过了一个更好的选择吗?
我现在正在编写一个下载管理器,我问自己是否可能:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
Run Code Online (Sandbox Code Playgroud)
它每次都返回true,所以我想这是不可能的.但是你知道我怎么能轻易做到这一点吗?我的意思是,没有足够的"if"或"switch"......
不管怎么说,还是要谢谢你 !:)
我在这里阅读了有关枚举及其“实现”的内容
重点是,为什么要使用枚举,而不是用于类型提示?
但此实现不允许使用类型提示。因为枚举条目都是字符串。
我有什么办法可以说
function($a) {
}
Run Code Online (Sandbox Code Playgroud)
$a必须是'foo','bar'或'baz'
在 PHP 中?
我使用 phpstorm/intellij 所以如果有另一种方法可以做到这一点,那也很好。例如,在文档中说,但是使用 phpstorm 的自动完成魔法,或者可能是编译错误。
具有数百个表的数据库通常会在其中定义更少的枚举/集合.
你如何将你的PHP代码与枚举值同步,以避免在代码中使用字符串文字(我们都知道它似乎更容易,但从长远来看会导致愚蠢的错误).
我能想到的唯一好的解决方案是在项目构建期间使用一个过程,该过程将为DB中的所有枚举生成常量,或者使用这些值创建和编译PHP扩展.
有什么不同的,更好的解决方案吗?