2013-03-13 11 views

Odpowiedz

34

Mały FYI, po pierwsze, nie ma to nic wspólnego z Symfony - tak się składa, że ​​Symfony2 używa namespaces.

Jeśli nie używasz przestrzeni nazw, datetime class jest zawsze dostępny przez new DateTime() - dzieje się tak, ponieważ jesteś już w obszarze nazw "root". Jednak, gdy używasz przestrzeni nazw, po prostu używanie new DateTime() nie będzie działać tak, jak będzie szukać tej klasy w bieżącym obszarze nazw. Przykład:

<?php 

namespace MyApp\Component; 

class Something 
{ 
    function __construct() 
    { 
     $dt = new DateTime(); 
    } 
} 

Spowoduje błąd (na przykład Class 'MyApp\Component\DateTime' not found in ...), ponieważ nie jest klasa w MyApp\Component nazw nazwie DateTime.

Dlatego właśnie znalazłeś \DateTime(), który nakazał interpreterowi, aby zajrzał do przestrzeni nazw "root" (?) Dla klasy DateTime.

Można również użyć słowa kluczowego use zaimportować klasę DateTime - górna część skryptu będzie wyglądać - pozwala to wystarczy zadzwonić new DateTime():

<?php 

namespace MyApp\Component; 

use \DateTime; 
+0

Awesome! dzięki .. –

+0

Możesz także dodać "use DateTime" do swojej klasy, a następnie po prostu "new DateTime()", w ten sposób importujesz klasy z predefiniowanymi znakami do innych, gotowych do użycia. – catchamonkey

+0

@catchamonkey true. Dodam to do odpowiedzi. – Prisoner

1

\ DateTime to klasa DateTime o podanej nazwie. Prawdopodobnie znajduje się gdzieś na górze pliku, na który patrzysz, ma opóźnienie \ X \ X. \ DateTime powinny być dostępne wszędzie można zadeklarować użycie \ X \ X

3

Zobacz http://www.php.net/manual/en/language.namespaces.global.php

Należy również zobaczyć namespace X\Y; na początku pliku, \DateTime oznacza, że ​​klasa DateTime należy przyjmować z globalnym przestrzeń nazw, zamiast X\Y.

tj. this DateTime.

+0

\ DateTime oznacza, że ​​nie znajduje się w bieżącym obszarze nazw. Jest w przestrzeni nazw "root". – Prisoner

+0

dzięki, @Prisoner, moja rada powinna być teraz poprawna – Ivo