2012-02-23 26 views
12

PHP 5.3'te ad alanlarını öğreniyorum ve İsim Boşaltmalarını kullanmak istiyorum. Bu SplClassLoader class'u buldum, ancak nasıl çalıştığını anlayamıyorum.PHP SplClassLoader ile Otomatik Yükleme?

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

nasıl sınıf Özdevinimli etkinleştirebilirim:

en Böyle dizin yapısına sahip, söylememe izin ver? request.php ve response.php hangi adlara sahip olmalıdır?

namespace framework\http; 

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

Ve bu response.php geçerli::

Bu

request.php olduğunu

namespace framework\http; 

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

Ve index.php I var:

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

$r = new Request(); 

hata mesajını alıyorum:

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

Neden bu olmuyor ? Projelerimde SplClassLoader'u nasıl kullanabilirim, böylece sınıflarımı yükler/gerektirir ve klasörleri ve ad alanlarını nasıl ayarlamalı ve adlandırmalıyım?

+0

Ben senin dosya ve dizin adları büyük harfle başlamak gerekebilir düşünüyorum? –

+0

@Adrian Macneil: Pencerelerde değil, haklısınız, bu yapılmalı. – hakre

cevap

11

Dosyanız ve dizin adları aşağıdaki örnekte olduğu gibi, tam olarak sınıflar ve ad olayını eşleşmeleri gerekir: SplClassLoader nesneyi kaydederken

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

Ayrıca, yalnızca kök ad ilan etmek gerekir aşağıdaki gibi:

<?php 

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

    use framework\http\Request; 

    $r = new Request(); 

?> 

Bu yardımcı olur umarız!

+3

"Yeni İstek()" 'i referans almadan önce gerekli olan bir şeyi kaçırmadığım için framework \ http \ Request kullanmalıyım. –

+0

@MarkFox Düzeltilecek şekilde düzenlendi. Head-up için teşekkürler. – rintaun