在PHP中开始我的冒险。我想知道什么时候最好使用常数?我觉得它可以出于安全原因使用:
程序员是否将它们用于安全目的?如果是这样的话?
答案 0 :(得分:2)
在编写PHP应用程序时,常量非常有用。从编写查询到逻辑,您可以充分利用常量。我将其用途分类如下:
隐藏内部细节: - 有时,即使代码暴露出什么是逻辑,我们也不希望透露。像这句话如果有点难以解码:
if($status==ACTIVE) than if($status==1)
可维护性: - 您的团队中有新的开发人员,他正在接受代码研究。现在,他也很容易理解这些事情。
我可能会遗漏几点,但我想这可以说明常数的重要性。
答案 1 :(得分:0)
否,出于安全原因,他们不会使用它。
此处的常量与数学,
中的常量相同例如:您可以保存任何API密钥,例如Google-Analytic的密钥,或任何默认值,例如某些API的网址等。
有关详情,请查看文档http://us3.php.net/constant
希望这能回答你的问题
答案 2 :(得分:0)
我完全同意Sankalp Mishra的回答!让我举一个例子,我在最近的作品中使用了常量。我一直在研究许多API,其中之一就是Google Places API。
Google API的响应包含一个名为status的字段,其中包含以下值:
OK indicates that no errors occurred; the place was successfully detected and at least one result was returned.
UNKNOWN_ERROR indicates a server-side error; trying again may be successful.
ZERO_RESULTS indicates that the reference was valid but no longer refers to a valid result. This may occur if the establishment is no longer in business.
OVER_QUERY_LIMIT indicates that you are over your quota.
REQUEST_DENIED indicates that your request was denied, generally because of lack of a sensor parameter.
INVALID_REQUEST generally indicates that the query (reference) is missing.
NOT_FOUND indicates that the referenced location was not found in the Places database.
我用这种方式创建了一个包含所有Google constats的类:
<?php
class GooglePlacesCallStatus {
const STATUS_OK = 'OK';
const STATUS_ZERO_RESULTS = 'ZERO_RESULTS';
const STATUS_OVER_QUERY_LIMIT = 'OVER_QUERY_LIMIT';
const STATUS_REQUEST_DENIED = 'REQUEST_DENIED';
const STATUS_INVALID_REQUEST = 'INVALID_REQUEST';
const STATUS_UNKNOWN_ERROR = 'UNKNOWN_ERROR';
const STATUS_NOT_FOUND = 'NOT_FOUND';
}
?>
这有助于我将类中的常量与响应状态值进行匹配,从而执行必要的处理或处理错误。这变得非常简单,可以帮助您避免在代码中使用不必要的值并有助于提高可读性。
答案 3 :(得分:0)
我的观点是PHP中的常量与其他编程语言中的常量没有区别。它们最适合用于提供“常数”值,例如方程中使用的“魔术”数字。当然是这样的:
define('PI', 3.14);
$radius = 11;
$area = PI * $radius * $radius;
制作一些不错的自我记录代码。如果你在许多不同的地方使用那个常量,那么它特别有价值,所以如果你决定将常数改为3.14159,那么你只需要在那个定义中进行。
据说,php常量有一些缺点。
例如,你不能像常规变量那样在字符串中插入它们,因此大多数人都会因为这个原因而避免使用字符串常量。
它们也是全局变量,并且有大量全局常量一直在浮动并不是那么好,更不用说在需要使用时必须包含或要求包含这些常量定义的文件的组织麻烦他们。在PSR-0时代,组件库和自动加载器,常量是一件麻烦事。
我也找不到引人注目的安全论据。是的,常量一旦被定义就无法更改,但是,常量变量不会使常量变得更不可能。大多数库将选择一个配置文件,该文件可能包含带有数据库凭据的数组或单例对象,而不是像DB_USERNAME,DB_PASSWORD,DB_NAME等一堆丑陋的常量,并且这些常量必须以某种约定命名。命令你弄清楚他们去哪里,以及他们代表什么。
如果你确实有一个幻数或常数数值,那么我会考虑使用一个php常量,但我认为你会发现它们通常很麻烦,而且比它们在大多数时候都值得更麻烦