PHP autoloading sabitler?

2 Cevap php

Ben umuyordum ki ben ayrı bir ad sabitleri tanımlamak için olsaydı, gibi:

namespace config\database\mysql;

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

Ben kullanmak mümkün olacağını __autoload otomatik olarak dahil etmek için:

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;

Bu, ancak, çalışmıyor. __autoload bir Undefined constant hata ile beni bırakarak, bu sınıflar ile olduğu gibi sabit çağrısında değildir.

I __autoload sabitleri için sınıf taklit bazı yolu var mı?

2 Cevap

(Benim sunucu üzerinde çalıştı) bu deneyin:

<?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;
?>

Temelde sabitleri için bir sarıcı olarak hareket etmek bir sınıf oluşturmak gerekiyor ama böyle yaparak istediğiniz gibi __ autoload () çalışmasını sağlar.

Tanımlanmamış bir sabit kullanarak bir PHP uyarı atmak olacaktır.

Siz uygun sabitler dosyasında uyarı ve yükü yakalamak için bir özel hata işleyicisi yazabilirsiniz.