「PHPの基礎 - 定数」の版間の差分
提供: MochiuWiki : SUSE, EC, PCB
📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == <br><br> == 魔法定数 == <code>__DIR__</code>は、PHPの魔法定数 (マジカル定数) の1つであり、そのPHPファイルが配置されているディレクトリの絶対パスを返す。<br> <u>この定数は、PHP 5.3以降で使用可能である。</u><br> <br> 例えば、以下に示すようなファイル構成の場合、index.phpファイル内で<code>__DIR__</code>を指定すると/var/www/html/myappを指す。<br> /var…」 |
編集の要約なし |
||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
定数は、プログラムの実行中に値が変更されない固定値を表現するために使用する。<br> | |||
変数とは異なり、1度定義すると変更できない。<br> | |||
<br> | |||
定数の定義方法には、主に2つのアプローチがある。 | |||
* define関数を使用する方法 | |||
* constキーワードを使用する方法 | |||
<br> | |||
constキーワードはコンパイル時に定義される必要があり、クラス内での定数定義にも使用できる。<br> | |||
define関数は実行時に定義できるため、動的な使用が可能である。<br> | |||
<br> | |||
PHPには多くの組み込み定数が存在する。<br> | |||
例えば、<code>PHP_VERSION</code>はPHPのバージョン、<code>TRUE</code>、<code>FALSE</code>、<code>NULL</code>といった論理値も定数として扱われる。<br> | |||
<br> | |||
また、マジックコンスタントと呼ばれる特殊な定数もある。<br> | |||
<code>__FILE__</code> (現在のファイルパス) や <code>__LINE__</code> (現在の行番号) 等がこれに該当する。<br> | |||
<br> | |||
定数を使用することにより、コード全体で一貫した値を維持できること、意図しない値の変更を防げること、コードの可読性が向上すること等が挙げられる。<br> | |||
特に、設定値やシステム全体で共有する値の管理に適している。<br> | |||
<br> | |||
なお、定数が定義済みかどうかは<code>defined</code>関数で確認できる。<br> | |||
<syntaxhighlight lang="php"> | |||
if (defined('MAX_USERS')) { | |||
echo "MAX_USERSは定義済みです"; | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== define関数の使用 == | |||
<syntaxhighlight lang="php"> | |||
define('MAX_USERS', 100); | |||
echo MAX_USERS; // 出力 : 100 | |||
</syntaxhighlight> | |||
<br><br> | |||
== constキーワードの使用 == | |||
<syntaxhighlight lang="php"> | |||
const MIN_AGE = 18; | |||
echo MIN_AGE; // 出力 : 18 | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
2024年11月20日 (水) 13:23時点における最新版
概要
定数は、プログラムの実行中に値が変更されない固定値を表現するために使用する。
変数とは異なり、1度定義すると変更できない。
定数の定義方法には、主に2つのアプローチがある。
- define関数を使用する方法
- constキーワードを使用する方法
constキーワードはコンパイル時に定義される必要があり、クラス内での定数定義にも使用できる。
define関数は実行時に定義できるため、動的な使用が可能である。
PHPには多くの組み込み定数が存在する。
例えば、PHP_VERSIONはPHPのバージョン、TRUE、FALSE、NULLといった論理値も定数として扱われる。
また、マジックコンスタントと呼ばれる特殊な定数もある。
__FILE__ (現在のファイルパス) や __LINE__ (現在の行番号) 等がこれに該当する。
定数を使用することにより、コード全体で一貫した値を維持できること、意図しない値の変更を防げること、コードの可読性が向上すること等が挙げられる。
特に、設定値やシステム全体で共有する値の管理に適している。
なお、定数が定義済みかどうかはdefined関数で確認できる。
if (defined('MAX_USERS')) {
echo "MAX_USERSは定義済みです";
}
define関数の使用
define('MAX_USERS', 100);
echo MAX_USERS; // 出力 : 100
constキーワードの使用
const MIN_AGE = 18;
echo MIN_AGE; // 出力 : 18
魔法定数
__DIR__は、PHPの魔法定数 (マジカル定数) の1つであり、そのPHPファイルが配置されているディレクトリの絶対パスを返す。
この定数は、PHP 5.3以降で使用可能である。
例えば、以下に示すようなファイル構成の場合、index.phpファイル内で__DIR__を指定すると/var/www/html/myappを指す。
/var/www/html/myapp/
├── index.php
└── classes/
└── class.php
__DIR__のメリットを以下に示す。
- パスの信頼性
// 相対パスの場合 (非推奨) require_once('class.php'); // 実行時の作業ディレクトリに依存 // __DIR__を使用 (推奨) require_once(__DIR__ . '/class.php'); // 常に確実なパス
- 異なるディレクトリからの実行でも動作
// classes/class.phpを読み込む場合 require_once(__DIR__ . '/classes/class.php');
- セキュリティの向上
- 相対パスを使用する場合と比べて、意図しないファイルが読み込まれるリスクを減らす。
- IDEのサポート
- 絶対パスを使用することいより、IDEの補完機能やパス解決が正確に機能する。
// 一般的な使用例
// 設定ファイルの読み込み
require_once(__DIR__ . '/config/config.php');
// クラスファイルの読み込み
require_once(__DIR__ . '/classes/User.php');
// テンプレートの読み込み
include(__DIR__ . '/templates/header.php');
※注意
- WindowsでもLinuxでも適切に動作する。(パスの区切り文字を自動的に処理)
- ファイルパスを組み立てる場合は、ディレクトリの区切り文字 ("/") の重複に注意する。
// 応用例
// 共通の定数として定義
define('BASE_PATH', __DIR__);
define('CLASS_PATH', BASE_PATH . '/classes');
define('CONFIG_PATH', BASE_PATH . '/config');
// 後で使用
require_once(CLASS_PATH . '/User.php');
require_once(CONFIG_PATH . '/database.php');