2012-02-23 9 views
12

मैं PHP 5.3 में नेमस्पेस के बारे में सीख रहा हूं और मैं नेमस्पेस ऑटोलोडिंग का उपयोग करना चाहता हूं। मुझे यह SplClassLoader class मिला, लेकिन मैं यह नहीं समझ सकता कि यह कैसे काम करता है।SplClassLoader के साथ PHP Autoloading?

मान लें कि मैं इस तरह निर्देशिका संरचना है:

system 
    - framework 
    - http 
     - request.php 
     - response.php 
index.php 
SplClassLoader.php 

मैं कक्षा autoloading कैसे सक्षम करूं? request.php और response.php में क्या नामस्थान होना चाहिए?

namespace framework\http; 

class Request 
{ 
    public function __construct() 
    { 
     echo __CLASS__ . " constructer!"; 
    } 
} 

और यह response.php है:

यह request.php है

namespace framework\http; 

class Request 
{    
    public function __construct() 
    {  
     echo __CLASS__ . " constructed!";     
    }   
} 

और index.php में मेरे पास है:

require_once("SplClassLoader.php"); 
$loader = new SplClassLoader('framework\http', 'system/framework'); 
$loader->register(); 

$r = new Request(); 

मैं इस त्रुटि संदेश मिलता है:

Fatal error: Class 'Request' not found in C:\wamp\apache\htdocs\php_autoloading\index.php on line 8 

यह क्यों काम नहीं कर रहा है? मैं अपनी परियोजनाओं में SplClassLoader का उपयोग कैसे कर सकता हूं ताकि यह मेरी कक्षाओं को लोड/आवश्यकता हो, और मैं फ़ोल्डर्स और नेमस्पेस को कैसे सेट और नामित करूँ?

+0

मुझे लगता है कि आपकी फ़ाइल और निर्देशिका नामों को पूंजी अक्षरों से शुरू करने की आवश्यकता हो सकती है? –

+0

@ एड्रियन मैकनील: खिड़कियों में नहीं, लेकिन आप सही हैं, इसे बनाया जाना चाहिए। – hakre

उत्तर

11

आपकी फ़ाइल और निर्देशिका नाम निम्न उदाहरण में, वास्तव में अपनी कक्षाओं और नामस्थान के मामले मिलान करने की आवश्यकता:

system 
    - framework 
    - http 
     - Request.php 
     - Response.php 
index.php 
SplClassLoader.php 

साथ ही, आपको केवल रूट नामस्थान घोषित करने के लिए जब SplClassLoader वस्तु दर्ज की जरूरत है, निम्नानुसार है:

<?php 

    require_once("SplClassLoader.php"); 
    $loader = new SplClassLoader('framework', 'system/framework'); 
    $loader->register(); 

    use framework\http\Request; 

    $r = new Request(); 

?> 

आशा है कि इससे मदद मिलती है!

+3

मुझे लगता है कि 'नया अनुरोध()' संदर्भित करने से पहले 'फ्रेमवर्क \ http \ अनुरोध;' का उपयोग करने की आवश्यकता है ... जब तक कि मुझे कुछ याद नहीं आ रहा है। –

+0

@MarkFox को ठीक करने के लिए संपादित किया गया। सर उठाने के लिए धन्यवाद। – rintaun

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