我正在阅读一本PHP书,其中作者说应该避免使用符号,除非它们有效使用它们。非常有用的东西,如果他只能详细说明或给出代码示例,但他没有。
来自经验丰富的PHP群体的人可以给我一个这些符号是什么的例子,以及何时使用它们是有意义的。我正在寻找一个代码示例,我可以解决这个问题,因为我不会用简单的英语来理解它。代码对我来说更简单英语。
修改
他说你可以将一个字符串定义为一个'符号',这将使这个字符串全局和不变,但它对安全性有好处,因为它是常量的,不能被错误地或故意地改变。我正在寻找使用这些符号的具体例子。
答案 0 :(得分:6)
我认为你的意思是Constants?
反对在PHP中使用它们的一个重要原因是,如果没有定义常量,PHP会将其解释为字符串值,只抛出一个通知,而不是致命错误,因为它 - 在我的拙见中 - 应该。
define("NUMBER_OF_PAGES", 1);
echo NUMBER_OF_PAGES; // outputs "1"
echo NUMBR_OF_PAGES; // outputs literally "NUMBER_OF_PAGES" and throws
// Notice: Use of undefined constant NUMBR_OF_PAGES -
// assumed 'NUMBR_OF_PAGES' in xyz
// constant() is a workaround but it takes away a lot
// of a constant's elegance IMO:
echo constant("NUMBER_OF_PAGES"); // Returns "1"
echo constant("NUMBR_OF_PAGES"); // Returns null
这使得常量的使用有些容易出错,特别是在使用不完美的编码实践触发数十或数百条E_NOTICE消息的旧应用程序中(但没有任何地方像使用未定义的常量那样糟糕)并且很难发现错误。
您的应用程序越干净,问题就越少,因为处理(并注意到)E_NOTICE级别的消息变得可能。不过,一个未定义的常量应该是我心中的致命错误,我认为这是一个设计错误。
具有查找功能的IDE可以稍微缓解问题,并有助于避免拼写错误。
如果给定一个不存在的常量名,还有函数constant()将返回NULL。 (见上面的代码。)
具体用法示例:
常量通常用于定义当前路径和/或URL:
define("APP_WEBROOT", "http://www.mydomain.com/appname");
define("APP_WEBROOT_PATH", "/var/www/mydomain/appname");
或定义全局设置:
define("MAX_PAGES", 100);
define("MAX_ITEMS_PER_PAGE", 250);