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

时间:2016-10-03 15:25:25

标签: php

能够在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);
  }
}

3 个答案:

答案 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通常是全局的,只要您使用的是自动加载器