ホームページ >バックエンド開発 >PHPチュートリアル >配列を初期化するときに代入を定数にできないのはなぜですか?

配列を初期化するときに代入を定数にできないのはなぜですか?

WBOY
WBOYオリジナル
2016-06-20 12:34:591783ブラウズ

非常に奇妙な現象を今発見しました

次の配列をクラスの属性として設定しました。SYSTEM_LIB は私が定義した定数です

final class Application {    public static $_lib=array(        'route'         =>  SYSTEM_LIB.'/lib_route.php',        'mysql'         =>  SYSTEM_LIB.'/lib_mysql.php',    );}

しかし、最終的には実行すると、エラーは「解析エラー: 構文エラー、予期せぬ

メソッドに配列を入れると正常に作成できました。
final class Application {    public static $_lib=array();    public static function run(){        self::$_lib =array(            'route'         =>  SYSTEM_LIB.'/lib_route.php',            'mysql'         =>  SYSTEM_LIB.'/lib_mysql.php',        );    }}


配列ががクラス属性として設定されている場合、配列内の値は引用符で囲む必要があります。配列は定数


ディスカッション (解決策) への返信

クラスが定義されている場合、属性に不確実な値を割り当てることはできません

ユーザー定数は、プログラムが実行中です
構文チェックはプログラムの実行前に行われます

システム定数は値が決定されます

class T {  var $os = PHP_OS;}$p = new T;echo $p->os;

他の PHP 静的変数と同様、静的プロパティは初期化のみ可能です。 PHP 5.6 より前のリテラルまたは定数の使用は許可されません。
PHP の静的変数と同様、静的プロパティはリテラル値または定数でのみ初期化できます (PHP5.6 より前のバージョンは許可されません)。

PHP 5.6 以降では、const 式と同じルールが適用されます。
PHP 5.6 以降では、const 式と同じルールが適用されます。 、コンパイル時に計算できる限り、いくつかの特定の式を使用できます

したがって、最初の書き方は PHP 5.6 以降で正常に実行できます。

私の印象では、静的変数は他の変数や関数を値として初期化することはできません

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。