web-dev-qa-db-ja.com

PHPで静的定数を使用できますか?

私は以下がうまくいくと思っていましたが、うまくいかないようです。

<?php

class Patterns
{
    public static const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    public static const INT = "/^\d+$/";
    public static const USERNAME = "/^\w+$/";
}

syntax error, unexpected T_CONST, expecting T_VARIABLE

44
Emanuil Rusev

次のようにクラスでconstを使用できます。

class Patterns {
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    const INT = "/^\d+$/";
    const USERNAME = "/^\w+$/";
}

そして、次のようにUSERNAME constにアクセスできます:

Patterns::USERNAME
85
Naveed

PHPでは、staticとconstは2つの異なるものです。

constはクラス定数を示します。それらの前に「$」がないため、通常の変数とは異なり、その前に可視性修飾子(パブリック、保護、プライベート)を含めることはできません。構文:

class Test
{
    const INT = "/^\d+$/";
}

定数であるため、不変です。

静的は、同じクラスのオブジェクト間で共有されるデータを示します。このデータはcan変更可能です。例は、一度にいくつのインスタンスが再生されているかを追跡するクラスです。

class HowMany
{
    private static $count = 0;

    public function __construct()
    {
        self::$count++;
    }

    public function getCount()
    {
        return self::$count;
    }

    public function __destruct()
    {
        self::$count--;
    }
}

$obj1 = new HowMany();
$obj2 = new HowMany();

echo $obj1->getCount();

unset($obj2);

echo $obj1->getCount();
32

それらは静的な定数ではなく、単なる定数です

class Patterns 
{ 
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    const INT = "/^\d+$/"; 
    const USERNAME = "/^\w+$/"; 
} 

echo Patterns::EMAIL;
10
Mark Baker

いいえ、クラス定数に静的ラベルを付けたり、可視性を割り当てたりすることはできません。

http://php.net/manual/en/language.oop5.static.php

7
Sarfraz

それらを静的またはパブリックとして宣言する必要はありません。マニュアルの例をご覧ください。

http://www.php.net/manual/en/language.oop5.constants.php

2
Scott Saunders

どのようにして定数にアクセスしようとしていますか?

私はこれがうまくいくと信じています:

echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."

静的として宣言する場合。

0
Chris