[英]Is it possible to define a local constant within a PHP function?
能够在 PHP 中的 function 的 scope 中定义局部常量可能会很好
这样,任何阅读 function 的人都会知道该定义在 function 中是最终的,并且不会影响任何外部代码
像这样的东西(无效的语法):
public function laughManiacally($count){
const LAUGH = 'HA';
for($i=0;$i<$count;$i++){
echo LAUGH;
}
};
或者可能(再次无效):
...
final $laugh = 'HA';
...
有没有办法做到这一点? 如果不是,为什么不呢?
更新
JavaScript 允许块级常量声明的方式类似于我正在搜索的功能
function laughManiacally(count) {
const LAUGH = 'Ha';
for (let i = 0; i < count; i++) {
console.log(LAUGH);
}
}
你应该有
echo name_of_class::LAUGH
否则 PHP 将寻找使用define()
创建的全局常量。
跟进:
您也可以只在对象级别定义常量,例如
class foo {
const BAR = 'baz'; // valid
function foo() {
const BAR = 'baz'; // invalid. can't define constants INSIDE a method.
}
}
我认为您在这里将const
与范围混淆了。
function foo() {
$x = 1;
}
我不需要将$x
声明为const
因为它已经被限定为foo()
。 我必须明确地将它提升到全局范围才能在其他地方使用它(出于多种原因,这是一个坏主意)。 $x
可以更改,但前提是您在函数中这样做或编辑代码。
具有讽刺意味的是,使用define
设置的常量是全局范围的, const
通常是全局的,前提是您使用的是自动加载器
从 PHP 7 开始,匿名类能够提供以某种方式在 function 级别范围内的不可变变量:
# This will work as expected
function fulfill() {
$immutable = new class { const value = 42; };
return $immutable::value;
}
# This will compile, but what would one expect?
function misbehave() {
$immutable = new class { const value = 7; };
$immutable->value = 666;
return $immutable::value;
}
fulfill(); // => 42
misbehave(); // => 7
因此,虽然misbehave
确实编译,但它不允许更改匿名 class 常量,但 PHP 没有生成任何警告或错误:更改$immutable::value
的尝试只是默默地失败了。
此外,至少可以说,由此产生的语法非常复杂。
考虑到所有这些,避免广泛使用此工具很可能更明智,但它仍然积极地回答了这个问题:是的,PHP 允许在 function 中定义局部常数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.