能够在PHP
中的函数范围内定义局部常量可能会很好这样,任何阅读该函数的人都会知道该定义在函数中是最终的,并且不会影响任何外部代码
像这样的东西(无效的语法):
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);
}
}
答案 0 :(得分:10)
你应该
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.
}
}
答案 1 :(得分:7)
不,PHP中没有函数级常量。最接近的是class constant:
class A
{
const LAUGH = 'HA';
function laughManiacally($count)
{
for ($i=0; $i < $count; ++$i) {
echo static::LAUGH;
}
}
}
$obj = new A();
$obj->laughManiacally(5);
<强>输出:强>
HAHAHAHAHA
我也试过
final $laugh = 'HA';
final
关键字不能应用于类属性 - 仅适用于方法。
我建议阅读文档,而不是盲目地尝试随机语法..
答案 2 :(得分:0)
我认为你在这里混淆const
范围。
function foo() {
$x = 1;
}
我不需要将$x
声明为const
,因为它已经限定为foo()
。我必须明确地将它提升到全球范围,以便在其他地方使用它(这对many reasons来说是一个坏主意)。 $x
可以更改,但仅限于您在函数中执行此操作或编辑代码。
具有讽刺意味的是,使用define
设置的常量是全局范围的,const
通常是全局的,只要您使用的是自动加载器