PHP↔;JavaScript通信:常量与字符串

PHP↔;JavaScript通信:常量与字符串,php,javascript,Php,Javascript,我正在开发一个大量使用AJAX的web应用程序。服务器通常通过数组进行应答,以连接响应的不同部分 我想知道在以下两种方法中,处理这些数组中的键的最佳解决方案是什么(未显示JSON编码和解码): 串 这个解决方案很容易阅读,特别是在JavaScript中,但实际上很脆弱,很难维护 PHP: 常数 这是一个可靠的解决方案,允许使用短键和数字键,但它很重且难以读取(在我的情况下,使用反射自动生成JavaScript常量不是一个可接受的解决方案,并且无论如何也不能解决所有的缺点) PHP: Ja

我正在开发一个大量使用AJAX的web应用程序。服务器通常通过数组进行应答,以连接响应的不同部分

我想知道在以下两种方法中,处理这些数组中的键的最佳解决方案是什么(未显示JSON编码和解码):

串 这个解决方案很容易阅读,特别是在JavaScript中,但实际上很脆弱,很难维护

PHP:

常数 这是一个可靠的解决方案,允许使用短键和数字键,但它很重且难以读取(在我的情况下,使用反射自动生成JavaScript常量不是一个可接受的解决方案,并且无论如何也不能解决所有的缺点)

PHP:


JavaScript:

Answer.CONSTANT_1=
答案:常数_2=
var结果=ajax(…);
警报(结果[答案.常数_1]);


根据您的说法,什么是最佳选择?

一旦您将其输出JavaScript,它实际上就不会是一个常数。我个人会使用字符串,如果它能让你的代码更具可读性的话。为什么这会使它变得脆弱和难以维护?如果您需要一个常量字符串同时具有常量和可读性,则可以始终定义它。如果没有更多的信息,很难判断你是否能更好地使用数字或文字作为键。

一旦你把它呼出JavaScript,它实际上就不会是一个常数。我个人会使用字符串,如果它能让你的代码更具可读性的话。为什么这会使它变得脆弱和难以维护?如果您需要一个常量字符串同时具有常量和可读性,则可以始终定义它。如果没有更多的信息,很难判断你是否能更好地使用数字或文字作为你的钥匙

我认为字符串解决方案是脆弱的,因为任何键名称的更改 还必须在使用它们的代码中执行

此结论不正确,将导致代码无法维护

考虑以下PHP数据结构:

array(
 MyClass::FIELD1 => "my field1 value",
 MyClass::FIELD2 => "my field2",
 MyClass::FIELD3 => "field 3 is awesome",
);

class MyClass {
  const FIELD1 = "field1";
  const FIELD2 = "field2";
  const FIELD3 = "field3";
}
假设我们希望使用一个新字段来代替
field1
(如建议的用例中所示)-我们将其称为
newfield

class MyClass {
  const FIELD1 = "newfield";
  ....
}
现在代码处于不一致的状态。变量的名称与它的值不再有任何关联。
FIELD1
常量基本上位于它所表示的字段周围

想象一下,一年后,一位新程序员正在检查这段代码。她知道
newfield
存在,并希望访问它。但是她必须输入
result[Answer.FIELD1]
,而不是简单地输入
result.newfield
。每次她想访问
newfield
时,她都要记住并应用这个映射。但是,这是一个具有数百个字段的大型应用程序,并且大多数都是以这种方式被误导的。这是脆弱且无法维护的代码

常量只能用于本质上是常量的值。典型示例是存储数学常数,如pi:

class MyMathClass {
  const PI = 3.141592;
}
常量是维护易失性数据结构(字段名定期更改)的最差编程工具之一

我认为字符串解决方案是脆弱的,因为任何键名称的更改 还必须在使用它们的代码中执行

此结论不正确,将导致代码无法维护

考虑以下PHP数据结构:

array(
 MyClass::FIELD1 => "my field1 value",
 MyClass::FIELD2 => "my field2",
 MyClass::FIELD3 => "field 3 is awesome",
);

class MyClass {
  const FIELD1 = "field1";
  const FIELD2 = "field2";
  const FIELD3 = "field3";
}
假设我们希望使用一个新字段来代替
field1
(如建议的用例中所示)-我们将其称为
newfield

class MyClass {
  const FIELD1 = "newfield";
  ....
}
现在代码处于不一致的状态。变量的名称与它的值不再有任何关联。
FIELD1
常量基本上位于它所表示的字段周围

想象一下,一年后,一位新程序员正在检查这段代码。她知道
newfield
存在,并希望访问它。但是她必须输入
result[Answer.FIELD1]
,而不是简单地输入
result.newfield
。每次她想访问
newfield
时,她都要记住并应用这个映射。但是,这是一个具有数百个字段的大型应用程序,并且大多数都是以这种方式被误导的。这是脆弱且无法维护的代码

常量只能用于本质上是常量的值。典型示例是存储数学常数,如pi:

class MyMathClass {
  const PI = 3.141592;
}

常量是维护易失性数据结构(字段名定期更改)的最差编程工具之一

难道你不希望这些键以它们存储的值命名吗?我是可读代码的爱好者。帮助我理解为什么字符串解决方案容易损坏且难以维护。另外,请帮助我理解,如果使用常量作为数字索引,为什么不能使用常量字符串作为索引?@ExplosionPills就是一个例子。我的常数具有自然更可读(和可接受)的名称。@Blackhole为什么键本身没有自然更可读(和可接受)的名称?@J.D.Pace对于数字索引,我是说常数的值。如果不使用常量,我们就不能合理地使用数字键,对吗?我认为字符串解决方案是脆弱的,因为键名的任何更改都必须在使用它们的代码中执行。但另一种解决方案也是如此,我想……难道你不希望这些键以它们存储的值命名吗?我是可读代码的爱好者。帮助我理解为什么字符串解决方案容易损坏且难以维护。另外,请帮助我理解,如果使用常量作为数字索引,为什么不能使用常量字符串作为索引?@ExplosionPills就是一个例子。我的常量具有自然更可读(和可接受)的名称。@Blackhole为什么键本身没有自然更可读(和可接受)的名称?@J.D.Pace对于数字索引,我是tal
class MyMathClass {
  const PI = 3.141592;
}