Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Autoloading constants in PHP?

I was hoping that if I were to define constants in a separate namespace, like:

namespace config\database\mysql;

const HOST = 'localhost';
const USER = 'testusr';
const PASSWORD = 'testpwd';
const NAME = 'testdb';

That I would be able to use __autoload to automatically include them:

function __autoload($className)
{
    echo "Autoload: {$className}\n";
    $class_file = str_replace('\\', '/', $className) . ".php";
    if(file_exists($class_file)) {
        include $class_file;
    }
}

echo config\database\mysql\HOST;

This, however, does not work. The __autoload is not called for the constant as it is with classes, leaving me with a Undefined constant error.

Some way that I can simulate the class __autoload for constants?

like image 542
Atli Avatar asked Jan 21 '10 15:01

Atli


1 Answers

Try this (worked on my server):

<?php
namespace config\database\mysql;

class Mysql
{
    const HOST = 'localhost';
    const USER = 'testusr';
    const PASSWORD = 'testpwd';
    const NAME = 'testdb';
}
?>

<?php
function __autoload($className)
{
    echo "Autoload: {$className}\n";
    $class_file = str_replace('\\', '/', $className) . ".php";
    if(file_exists($class_file)) {
        include $class_file;
    }
}

echo config\database\mysql\Mysql::HOST;
?>

Basically you need to create a class to act as a wrapper for the constants but by doing so it allows __autoload() to work as you intended.

like image 77
John Conde Avatar answered Nov 20 '22 08:11

John Conde