Php Constant Arrays
## Introduction
In PHP, constants are identifiers for simple values that cannot change during the execution of a script. Historically, PHP constants could only hold scalar values (such as integers, floats, strings, and booleans).
Starting with **PHP 5.6**, it became possible to define constant arrays using the `const` keyword. With the release of **PHP 7.0**, this capability was expanded to support defining constant arrays using the `define()` function as well.
This comprehensive guide covers the syntax, usage, practical examples, and key considerations when working with constant arrays in PHP.
---
## Syntax and Usage
There are two primary ways to define constant arrays in PHP: using the `const` keyword or using the `define()` function.
### 1. Using the `const` Keyword (PHP 5.6+)
The `const` keyword defines constants at compile-time. It is clean, readable, and can be used both in the global scope and inside class definitions.
```php
const FRUITS = ['apple', 'banana', 'orange'];
```
### 2. Using the `define()` Function (PHP 7.0+)
The `define()` function defines constants at runtime. This allows you to assign dynamically generated arrays to constants, which is not possible with `const`.
```php
define('COLORS', ['red', 'green', 'blue']);
```
---
## Code Examples
### Basic Usage: Global Constant Arrays
Here is how you can define and access global constant arrays using both methods:
```php
'localhost',
'username' => 'root',
'password' => 'secret_password',
'db_name' => 'app_db'
];
// Defining a constant array using define() (Runtime)
define('ALLOWED_ROLES', ['admin', 'editor', 'subscriber']);
// Accessing the constant arrays
echo "Database Host: " . DATABASE_CONFIG['host'] . "\n";
if (in_array('admin', ALLOWED_ROLES)) {
echo "Admin role is allowed.\n";
}
?>
```
### Class Constant Arrays
You can define constant arrays inside a class using the `const` keyword. These are accessed using the scope resolution operator (`::`).
```php
'Administrator',
'EDITOR' => 'Content Editor',
'USER' => 'Regular User'
];
public function getRoleLabel(string $roleKey): ?string {
// Accessing class constant within the class
return self::ROLES[$roleKey] ?? null;
}
}
// Accessing class constant outside the class
print_r(UserRole::ROLES);
$userRole = new UserRole();
echo "Role Label: " . $userRole->getRoleLabel('ADMIN') . "\n";
?>
```
### Dynamic Constant Arrays (PHP 7.0+)
Because `define()` is evaluated at runtime, you can construct an array dynamically before assigning it to a constant.
```php
```
---
## Key Differences: `const` vs `define()`
| Feature | `const` | `define()` |
| :--- | :--- | :--- |
| **PHP Version** | Supported since PHP 5.6+ | Supported since PHP 7.0+ |
| **Evaluation Time** | Compile-time | Runtime |
| **Scope** | Can be used in global scope and inside classes | Can only be used in global scope |
| **Dynamic Values** | No (requires static initializers) | Yes (can accept dynamic expressions) |
| **Speed** | Slightly faster (compile-time optimization) | Slightly slower (runtime execution) |
---
## Important Considerations
### 1. Constant Arrays are Immutable
Once a constant array is defined, its elements cannot be modified, added, or removed. Attempting to do so will result in a fatal error or a syntax error.
```php
true];
// This will trigger a Fatal Error: Cannot use temporary expression in write context
// CONFIG['debug'] = false;
?>
```
### 2. Nested (Multidimensional) Arrays are Supported
Constant arrays can be multidimensional, allowing you to store complex configuration structures.
```php
[
'users' => '/api/v1/users',
'posts' => '/api/v1/posts'
],
'v2' => [
'users' => '/api/v2/users',
'posts' => '/api/v2/posts'
]
];
echo API_ENDPOINTS['v2']['users']; // Outputs: /api/v2/users
?>
```
### 3. Performance Benefits
Using constant arrays for static configuration data (like status codes, error messages, or application settings) is highly recommended. Because they are immutable, PHP can optimize their memory allocation, making them more efficient than global variables.
YouTip