2010-01-21 13 views
6

मुझे उम्मीद थी कि अगर मैं की तरह, एक अलग नाम स्थान में स्थिरांक परिभाषित करने के लिए किए गए:ऑटोलोडिंग स्थिरांक?

namespace config\database\mysql; 

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

कि मैं __autoload करने के लिए उपयोग करने में सक्षम होगा उन्हें स्वचालित रूप से शामिल हैं:

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; 

लेकिन यह काम नहीं करता। __autoload निरंतर के लिए नहीं कहा जाता है क्योंकि यह कक्षाओं के साथ है, मुझे Undefined constant त्रुटि के साथ छोड़कर।

कुछ तरीकों से मैं स्थिरांक के लिए __autoload कक्षा का अनुकरण कर सकता हूं?

उत्तर

7

इस (अपने सर्वर पर काम किया) का प्रयास करें:

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

मूल रूप से आप एक वर्ग स्थिरांक के लिए एक आवरण के रूप में कार्य करने के लिए बनाने की जरूरत है, लेकिन ऐसा करने से तो यह __autoload() आपकी इच्छानुसार काम करने के लिए अनुमति देता है।

+0

धन्यवाद! यह आशाजनक लग रहा है। हालांकि मुझे डमी कक्षाओं में उन्हें लपेटने का शौक नहीं है, लेकिन ऐसा लगता है कि यह काम करता है। – Atli

0

एक अपरिभाषित स्थिरांक का उपयोग करना एक PHP चेतावनी फेंक देगा।

आप उचित स्थिरांक फ़ाइल में चेतावनी और लोड को पकड़ने के लिए एक कस्टम त्रुटि हैंडलर लिख सकते हैं।

+1

यह नहीं है कि अटली क्या पूछ रहा है ... –

+0

सुझाव के लिए धन्यवाद। दुर्भाग्य से 'Undefiend निरंतर' त्रुटि एक घातक त्रुटि ('E_ERROR') है, जो एक कस्टम हैंडलर पकड़ नहीं सकता है। – Atli

+0

हम्म। निश्चित रूप से यह एक नोटिस होता था, लेकिन मैं 5.3 का उपयोग नहीं कर रहा हूँ। – Mike

संबंधित मुद्दे