我正在使用PHP
& MySQL
,但这个问题与语言无关。我有一个应用程序,其中有一个名为类别的db表,其中包含category_id
和category_name
。
|---------------------|
| Cat ID | Cat Name |
| --------------------|
| 1 | Desktop |
| 2 | Laptop |
| 3 | Tablet |
| 4 | Smart Phone|
|---------------------|
在代码中我需要在很多地方对这些ID进行比较,所以我将它们定义为常量,所以我知道我在比较什么:
define("DESKTOP",1);
define("LAPTOP",2);
define("TABLET",3);
define("SMARTPHONE",4);
所以现在我用它们像:
if($user_device == SMARTPHONE)
{
// do something..
}
随着类别的增加,我必须手动define()
。这是通常的做法吗?我可以动态查询表并根据类别名称和ID创建常量列表吗?这样做的最佳方式是什么?
答案 0 :(得分:2)
将项目存储在名为$items
的关联数组中,并为该项指定项目名称及其ID。
实施例
$items = array();
// Populate the array from the DB
while(...){
$items[$db_items['name']] = $db_items['ID'];
}
//Condition
if($user_device == $items['SMARTPHONE'])
{
// do something..
}
答案 1 :(得分:2)
当然,只需遍历数据库对象/数组并定义常量。
$categories = mysql_fetch_array( $data );
foreach($categories AS $category)
{
define($category['category_name'],$category['category_id']);
}
但实际上并不是如何使用常量。无论数据库,甚至应用程序如何,常量都是常量。例如,PI是常数。一英里的英寸数是常数。你使用它的方式应该是变量...
if($user_device == $category['smartphone'])
{
// do something...;
}
答案 2 :(得分:2)
我可以动态查询表并创建基于常量的列表 关于类别名称和ID?
是的,你可以。如果不使用常量,则使用变量。因为常量不会按照in the official PHP documentation所解释的那样改变:
常量是简单值的标识符(名称)。 作为名称 建议,在执行脚本期间,该值不能更改 (魔术常数除外,它们实际上不是常数)。 A. 常量是默认情况下区分大小写。按照惯例,不变 标识符总是大写的。
这就是为什么常量被称为常量& 变量被称为变量; 常量 常量& 变量是变量。
“魔术常数”基本上是系统可控的项目,如__FILE__
或__DIR__
。魔术常数的值可以改变,但它们不是由你直接控制,而是反映系统级别的变化。
那说在你的情况下,解决方案来自你的变量命名约定。意思是,有一些关于常数和大气的好处。使它们看起来适合您的代码需求。所以只需将代码更改为大写变量:
$DESKTOP = 1;
$LAPTOP= 2;
$TABLET= 3;
$SMARTPHONE= 4;
或者您可以设置一个名为$special_items
的数组,然后设置:
$special_items['DESKTOP'] = 1;
$special_items['LAPTOP'] = 2;
$special_items['TABLET'] = 4;
$special_items['SMARTPHONE'] = 4;
或许如果您希望它们可用于类的范围上下文,那么请执行以下操作:
$this->special_items['DESKTOP'] = 1;
$this->special_items['LAPTOP'] = 2;
$this->special_items['TABLET'] = 4;
$this->special_items['SMARTPHONE'] = 4;