

PHPで以下の定数エラーが起きます。なぜでしょうか？

**エラーメッセージ:**

[code]

    Symfony\Component\Debug\Exception\FatalThrowableError
    syntax error, unexpected 'const' (T_CONST)
    
[/code]

**該当のコード:**

[code]

    const $ABBB = 300;
    
[/code]

**実行環境:**

[code]

    % php -version
    PHP 7.3.24-(to be removed in future macOS) (cli) (built: Dec 21 2020 21:33:22) ( NTS )
    
[/code]

以下の関数の中でエラーが起きました。

[code]

        public function getYourAnswer($stack)
        {
           　$calcCost = 0;
            const INITIAL_COST = 300;
    
            $calcCost = calculate();
    
            $totalCost =  $calcCost + INITIAL_COST;
            return $totalCost;
        }
    
[/code]


CC BY-SA 4.0
2021-06-15T02:42:08.957
77558
2023-11-10T01:02:30.297
2021-06-15T10:52:38.283
44839
44839
question
php
定数エラー　'const' (T_CONST)


PHPでは定数には`$`を付けません。

[code]

    const ABBB = 300;
    
[/code]

しかし、それにしてはエラーメッセージはちょっと違うことを言っているようです。  
おそらく問題はその行ではなく1つ前までのコードに何か問題があると思われます。  
たぶん文末のセミコロン`;`が無いとか。  
確認してみてください。


CC BY-SA 4.0
2021-06-15T03:10:02.820
77562
2021-06-15T04:10:14.540
2021-06-15T04:10:14.540
3060
45045
77558
answer


PHPでは、全ての変数宣言の位置で`const`による定数宣言が書けるわけではありません。

(また、@ItagakiFumihiko さんの回答にあるように定数名には`$`は付けません。)

例えば、以下のようにクラス定数を宣言することならできます。

[code]

    class MyClass {
        private const INITIAL_COST = 300;
        
        public function getYourAnswer($stack)
        {
            $calcCost = 0;
            
            $calcCost = calculate();
            
            $totalCost =  $calcCost + MyClass::INITIAL_COST;
            return $totalCost;
        }
    }
    
[/code]


CC BY-SA 4.0
2021-06-15T11:07:00.127
77578
2021-06-15T11:07:00.127
13972
77558
answer


`public`が付いていることから想像するに、`getYourAnswer`はクラスのメソッドですか？  
いずれにしてもクラスのメソッドや通常の関数内でconstで定数を定義することはできません。  
定義するなら外です。

[code]

    class hogehoge {
    
        const INITIAL_COST = 300;
    
        public function getYourAnswer($stack)
        {
            $calcCost = 0;
    
            $calcCost = calculate();
    
            $totalCost =  $calcCost + INITIAL_COST;
            return $totalCost;
        }
    }
    
[/code]

`INITIAL_COST`を関数スコープ内に置きたいのなら、定数である必要があるかも検討してください。通常の変数でも良いのではないですか？

それから、質問とは関係ありませんが、提示されたコードには全角スペースが入っているため、そこでもエラーになります。


CC BY-SA 4.0
2021-06-15T11:17:17.653
77579
2021-06-15T11:17:17.653
45045
77558
answer


`define()` での宣言と比較して `const` キーワードには以下の制限があります。

[PHP: Constants
Syntax](https://www.php.net/manual/en/language.constants.syntax.php)

> **Note** :  
>  As opposed to defining constants using define(), constants defined using
> the **const keyword must be declared at the top-level scope because they are
> defined at compile-time. This means that they cannot be declared inside
> functions, loops, if statements or try/catch blocks**.


CC BY-SA 4.0
2021-06-15T11:39:32.313
77581
2021-06-15T11:39:32.313
77558
answer