Redefining Constants in PHP

Redefining constants in PHP

If you have the runkit extension installed, you can use runkit_constant_redefine():

runkit_constant_redefine("name", "value");

In most circumstances, however, it would be a better idea to re-evaluate why you're using constants and not something more fitting.

Is it possible to redefine PHP constants?

No, of course not. Then they wouldn't be "constants."

I can redefine constant in PHP without getting an error

To report all php error


To report all php errors except notices

error_reporting(E_ALL & ~E_NOTICE);

And in your case, you are redefining a constant that has been already defined show PHP throws a notice. By using

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

You are telling PHP not to report any kind of notices or warnings. You should remove them.

To get all warning and notices use


Fore more information refer to the official doc, and have a look on examples.

Can you undefine or change a constant in PHP?

No. Constants are constant.


Change the value of a previously-defined constant

From (emphasis is mine):

define — Defines a named constant


As the name suggests, that value cannot change during the execution of the script

Redefining Codeigniter slug-based constants in the model per user

It not so much "unset" as "not yet defined". Each browser request to a URL (controller) is a unique process in the server. So the constant is not redefined but is newly instantiated for each URL request.

If you try to run $this->main_model->set_slug_based_constants($slug); a second time you will get a PHP error message stating that Constant CLOUDFRONT_DIRECTORY already defined.

Try this version of the controller to see the error.

class Content extends CI_Controller
function __construct()

function index()
echo "The constant's value is <strong>".CLOUDFRONT_DIRECTORY."</strong><br>";
echo "The constant's value is <strong>".CLOUDFRONT_DIRECTORY."</strong><br>";;


It will produce output something like this.

The constant's value is Dave_cloudfront_directory

A PHP Error was encountered

Severity: Notice

Message: Constant CLOUDFRONT_DIRECTORY already defined

Filename: models/Main_model.php

Line Number: 13

The constant's value is Dave_cloudfront_directory

How to override a class constant in PHP?

If your users are extending your class, they can redefine the constant just fine:

class Foo extends Bar {
const BAZ = 42;

It doesn't matter whether Bar already defines a BAZ constant or not. All you have to do in your code is make sure you're referring to the "current classes" constant using late static binding:

public function useConst() {
echo static::BAZ;

Otherwise, you have the option of doing this:

if (!defined('BAZ')) {
define('BAZ', 42);

class Bar {
const BAZ = BAZ;

That's not really very elegant though. You should rather be using getters and setters on your class to allow configuration, rather than using constants for this purpose:


unset or change a defined constant PHP

When you use PHP's define() function, you're not defining a variable, you're defining a constant. Constants can't have their value modified once the script starts executing.

Related Topics

Leave a reply