开始我的 PHP 事业。我想知道什么时候最好使用常量?我觉得它可以用于安全原因:
程序员是否出于安全目的使用它们?如果是这样,以什么方式?
常量在编写 PHP 应用程序时非常有用。从编写查询到逻辑,您可以充分利用常量。我将它们的用途分类如下:
隐藏内部细节:- 有时,即使代码被公开,我们也不想透露逻辑是什么。如果有点难以解码,就像这个声明:
if($status==ACTIVE) than if($status==1)
可维护性:-您的团队中有一位新开发人员,他正在接受代码研究。现在他也很容易理解这些事情了。
我可能遗漏了几点,但我想这说明了常量的重要性。
不,出于安全原因,他们不使用它。
这里的常量与Math中的相同,
例如:您可以保存任何 API 密钥,如 Google-Analytic 的密钥,或任何默认值,如某些 API 的 url 等。
有关更多信息,请查看文档http://us3.php.net/constant
希望这能回答你的问题
我完全同意 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 常量的类:
<?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';
}
?>
这帮助我将类中的常量与响应状态值相匹配,并相应地执行必要的过程或处理错误。这变得非常容易,可以帮助您避免在代码中使用不必要的值并提高可读性。
我的观点是 PHP 中的常量与其他编程语言中的常量没有什么不同。它们最适合用于提供“恒定”值,例如方程式中使用的“幻数”。当然是这样的:
define('PI', 3.14);
$radius = 11;
$area = PI * $radius * $radius;
制作一些不错的、自我记录的代码。如果您在许多不同的地方使用该常量,这尤其有价值,因此如果您决定将常量更改为 3.14159,那么您只需在该定义中进行。
话虽如此,php 常量有一些缺点。
例如,您不能像在常规变量中那样将它们插入字符串中,因此大多数人因此避免使用字符串常量。
它们也是全局变量,并且始终有大量全局常量浮动并不是那么好,更不用说在需要使用它们时必须包含或要求包含这些常量定义的文件的组织麻烦。在 PSR-0 时代,组件库和自动加载器,常量是一件麻烦事。
我也没有发现一个令人信服的安全论点。是的,常量一旦被定义就不能更改,但是,这并不会使常量比常规变量更不可能被暴露。大多数库会选择一个配置文件,它可能包含一个带有数据库凭据的数组或单例对象,而不是一堆难看的常量,如 DB_USERNAME、DB_PASSWORD、DB_NAME 等,并且这些常量必须以某种约定命名为了让你弄清楚他们去哪里,以及他们代表什么。
如果您确实有一个幻数或常量数值,那么我会考虑使用 php 常量,但我认为您会发现它们通常很麻烦,而且在大多数情况下比它们的价值更麻烦。