2012-05-31 51 views
13

PHP 5.3.8PHP類的DateTime沒有發現

聲明一個DateTime對象,當失去了一些東西,我得到一個JSON字符串被傳遞到我的PHP控制器,一個確定的日期時間。

出於某種原因,我沒有得到它被映射爲PHP中的DateTime對象。但有點奇怪。請參見下面的圖片:

  1. 正如你可以在表達式窗口(右上)看,前一步,我檢查新的日期時間(MYVARIABLE)帶來正確轉化我需要什麼。在第一個手錶中,將該變量傳遞給DateTime構造函數。在第二個表中,表達式newDateTime(myVariable)已經映射爲DateTimeObject。顯然很好,在這裏。

    enter image description here

  2. 但遺憾的是,當我向前走,按F6鍵,下面的豁免(見下面的圖片)被拋出:

    Fatal error: Class 'Acme\StoreBundle\Repository\DateTime' not found in /Users/pgbonino/Sites/Symfony/src/Acme/StoreBundle/Repository/HistoryRepository.php on line 19 
    
    Call Stack: 
        0.0201  693568 1. {main}() /Users/pgbonino/Sites/Symfony/web/app_dev.php:0 
        0.0267 2106576 2. Symfony\Component\HttpKernel\Kernel->handle(???, ???, ???) /Users/pgbonino/Sites/Symfony/web/app_dev.php:24 
        0.0377 2649176 3. Symfony\Bundle\FrameworkBundle\HttpKernel->handle(???, ???, ???) /Users/pgbonino/Sites/Symfony/app/bootstrap.php.cache:547 
        0.0378 2650832 4. Symfony\Component\HttpKernel\HttpKernel->handle(???, ???, ???) /Users/pgbonino/Sites/Symfony/app/cache/dev/classes.php:4879 
        0.0378 2650832 5. Symfony\Component\HttpKernel\HttpKernel->handleRaw(???, ???) /Users/pgbonino/Sites/Symfony/app/cache/dev/classes.php:3875 
        0.1574 5562232 6. call_user_func_array(???, ???) /Users/pgbonino/Sites/Symfony/app/cache/dev/classes.php:3905 
        0.1574 5562600 7. Acme\StoreBundle\Controller\HistoryController->saveTestAction() /Users/pgbonino/Sites/Symfony/app/cache/dev/classes.php:3905 
        0.1694 5739032 8. Acme\StoreBundle\Repository\HistoryRepository->saveTestInHistory(???, ???) /Users/pgbonino/Sites/Symfony/src/Acme/StoreBundle/Controller/HistoryController.php:33 
    

    enter image description here

所以奇怪的是,Eclipse的Watch Expressions窗口並不像執行引擎一樣工作,反之亦然。

當然,我更喜歡它是相反的(它在執行而不是在監視窗口:))。

那麼,有什麼想法?

回答

37

你目前在Acme\StoreBundle\Repository\DateTime napespace。爲了解決在這種情況下,你需要你的類名前把領先\默認的命名空間,就像

$dt = new \DateTime(...); 

所以

namespace foo; 
$obj = new class(); 

會盡量foo命名空間中找到class定義。

而且

namespace foo; 
$obj = new \class(); 

將嘗試找到全局命名空間內class定義。

作爲替代方案,你可以導入使用

use \DateTime; 

類或創建別名(在情況下,如果你已經有了類在當前的NS同名):

use \DateTime as NewDT; 
+0

這樣好的答案(和快速)。它做到了! :) 非常感謝。 – ElPiter

+3

你也可以在頂部放一個'use DateTime;',然後你就可以使用它而不用引導斜槓。 –

+0

@丹李:非常棒! – zerkms

2

我猜你正在使用命名空間,並嘗試使用DateTime(相對於當前命名空間)而不是\ DateTime(完整的類名稱)