私は以下がうまくいくと思っていましたが、うまくいかないようです。
<?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
次のようにクラスで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
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();
それらは静的な定数ではなく、単なる定数です
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;
いいえ、クラス定数に静的ラベルを付けたり、可視性を割り当てたりすることはできません。
それらを静的またはパブリックとして宣言する必要はありません。マニュアルの例をご覧ください。
どのようにして定数にアクセスしようとしていますか?
私はこれがうまくいくと信じています:
echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."
静的として宣言する場合。