(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
  • constで定義された定数は名前空間の影響を受ける!!!!!!!!!!!!!
  • defineは名前空間の影響を受けず常にグローバル

3. 定義時に式が使えるか

const FOO = 1+2;     // ERROR
define('FOO1', 1+2);  
  • defineの場合、定数の値に式を使うことができる!!!!!!!!!!!!