找不到PHP类DateTime

ElP*_*ter 20 php eclipse datetime

PHP 5.3.8中声明DateTime对象时遗漏了某些内容

我得到一个带有确定日期时间的JSON字符串,该字符串被传递给我的php控制器.

出于某种原因,我没有将它映射为php中的DateTime对象.但有点奇怪.请参阅以下图像:

  1. 正如您在表达式窗口(右上角)中看到的那样,在步骤之前,我正在检查新的DateTime(myVariable)是否正确地引入和转换我需要的内容.在第一个watch中,传递给DateTime构造函数的变量.在第二个监视中,表达式newDateTime(myVariable)已映射为DateTimeObject.显然很好到这里.

    在此输入图像描述

  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
    
    Run Code Online (Sandbox Code Playgroud)

    在此输入图像描述

所以,奇怪的是,Eclipse的Watch Expressions窗口不像执行引擎那样工作,反之亦然.

当然,我更喜欢它是相反的(它在执行中工作,而不是在观察窗口:) :).

那么,任何想法?

zer*_*kms 51

你现在在Acme\StoreBundle\Repository\DateTimenapespace.要在这种情况下解决默认命名空间,您需要\在类名之前放置前导,例如

$dt = new \DateTime(...);
Run Code Online (Sandbox Code Playgroud)

所以

namespace foo;
$obj = new class();
Run Code Online (Sandbox Code Playgroud)

将尝试classfoo命名空间中查找定义.

namespace foo;
$obj = new \class();
Run Code Online (Sandbox Code Playgroud)

将尝试class在全局命名空间中查找定义.

作为替代方案,您可以使用导入类

use \DateTime;
Run Code Online (Sandbox Code Playgroud)

或者创建别名(如果你已经拥有当前NS中具有相同名称的类):

use \DateTime as NewDT;
Run Code Online (Sandbox Code Playgroud)

  • 你也可以在顶部放一个`use DateTime;`然后它就可以使用它而不会导致斜线. (3认同)

mar*_*log 6

我猜您正在使用命名空间并尝试使用 DateTime(相对于当前命名空间)而不是 \DateTime(完整的合格类名)