(php) constとdefineの違い
PHPの定数定義は2つ → define()関数とconst構文
define("FOO", 1); const FOO = 1;
⭐︎違い
1. クラス定数として利用できるか。
2. 名前空間の影響を受けるか。
3. 定義時に式が使えるか。
1. クラス定数として利用できるか
class Hoge { define("BAR", "bar"); // ERROR const FOO = "foo"; }
- define()関数はクラス内で使えない!!!!!!!!!!!!!!!!
- constを利用してクラス内で定義された定数はクラス定数となる。
↓こんな感じ
<?php class Product { const TAX_RATE = 0.05; private $price = 0; public function setPrice($price) { $this->price = $price; } public function getSalePrice() { $tax = $this->price * self::TAX_RATE; $price = $this->price + $tax; return $price; } } var_dump(Product::TAX_RATE); $prd = new Product(); $prd->setPrice(100); $price = $prd->getSalePrice(); var_dump($price); ?>
2. 名前空間の影響を受けるか。
※lib.php <?php namespace Lib; const FOO = "foo"; define("BAR", "bar"); ※test.php <?php require_once("lib.php"); echo BAR . PHP_EOL; echo \Lib\FOO . PHP_EOL; echo FOO . PHP_EOL; //ERROR
3. 定義時に式が使えるか
const FOO = 1+2; // ERROR define('FOO1', 1+2);
- defineの場合、定数の値に式を使うことができる!!!!!!!!!!!!