是否可以在PHP函数中定义一个局部常量?

是否可以在PHP函数中定义一个局部常量?

问题描述:

能够在PHP中的函数范围内定义一个局部常量可能不错。是否可以在PHP函数中定义一个局部常量?

这样,任何阅读函数的人都会知道该定义在函数内是最终的,并且不会影响任何外部代码。

像这样的东西(不是有效的语法):

public function laughManiacally($count){ 
    const LAUGH = 'HA'; 

    for($i=0;$i<$count;$i++){ 
    echo LAUGH; 
    } 
}; 

或可能(同样无效):

... 
final $laugh = 'HA'; 
... 

反正有没有做到这一点?如果不是,为什么不呢?

你应该有

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. 
    } 
} 
+0

仍然给错误,可能是我在做错误的方式:-https:// eval.in/654344。纠正我 –

+0

检查编辑... –

+0

很酷,这就是我所经历的,但无论如何要将本地变量标记为只读吗? – Arth

不,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关键字不能应用到P级roperties - 只适用于方法。

我建议你阅读文档,而不是盲目的尝试随机语法..

+0

我通常发现文档没有指定那些不存在的东西..因此找到很少使用的结构并不容易。我主要是使用这些语法尝试来展示我所希望的功能类型。 – Arth

我想你混淆const与范围在这里。

function foo() { 
    $x = 1; 
} 

我不需要申报$x作为const因为它已经作用域只是foo()。我不得不明确地将它提升到全球范围,以便在其他地方使用它(这是对many reasons的一个坏主意)。 $x可以更改,但只能在您的功能中进行更改,或者编辑代码。

讽刺的是,常量使用define设置是全局范围,与一般const作为全局提供您使用的是自动加载

+0

虽然我仍然想在'foo()'范围内声明'$ x'作为const .. – Arth

+0

@Arth不可能,因为我已经指出了。 – ShiraNai7

+0

@ ShiraNai7别担心,我读了你的答案!我甚至给它加1! – Arth