你会用什么方式在 php 中使用常量


What ways would you utilize CONSTANTS in php

开始我在PHP中的冒险。我想知道什么时候最好使用常量?我觉得它可以用于安全原因:

程序员是否出于安全目的使用它们?如果是,以什么方式?

常量在编写 PHP 应用程序时非常有用。从编写查询到逻辑,您可以充分利用常量。我将它们的使用分类如下:

  • 在整个代码中使用一个值:- 假设你有一个活动和非活动元素的系统,你把它们表示为 1 和 0。现在,您可以在许多文件的逻辑中使用它。Tommorow 您要更改"活动"和"非活动"的值。现在,如果您没有将其作为常量,您将使用它们访问每个文件并在那里进行更改,否则只需更改常量即可。
  • 为了隐藏内部细节:- 有时,即使代码暴露,我们也不想透露逻辑是什么。就像这句话,如果有点难以解码:

    if($status==ACTIVE) than if($status==1)

  • 可维护性:- 您的团队中有一个新的开发人员,他正在接受代码研究。现在他也很容易理解这些事情。

我可能遗漏了几点,但我想这说明了常量的重要性。

,出于安全原因,他们不使用它。

量在这里与数学中的常量相同,

  • 在变量中,您可以保存值,并根据需要不断更改它。
  • 在常量中,您可以保存值,并在整个应用程序/脚本/流中保持其不变

例如:您可以保存任何API密钥,例如Google分析的密钥,或任何默认值,例如某些API的网址等。

有关更多信息,请查看文档 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.

我以这种方式创建了一个包含所有谷歌统计数据的类:

<?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 常量,但我想你会发现它们通常很麻烦,而且在大多数时候比它们的价值更麻烦。