找不到 PHP 类日期时间

2022-08-30 14:08:16

PHP 5.3.8 中声明 DateTime 对象时缺少某些内容

我得到一个JSON字符串,其中包含一个确定的日期时间,该字符串被传递到我的php控制器。

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

  1. 正如您在表达式窗口(右上角)中看到的,在步骤之前,我正在检查新的DateTime(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 窗口并不像执行引擎那样工作,反之亦然。

当然,我希望它相反(它在执行中起作用,而不是在监视窗口中工作:))。

那么,有什么想法吗?


答案 1

你目前在napespace。在这种情况下,要寻址到默认命名空间,您需要在类名之前加上前导符,例如Acme\StoreBundle\Repository\DateTime\

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

所以

namespace foo;
$obj = new class();

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

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

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

作为替代方法,您可以使用以下命令导入类

use \DateTime;

或创建别名(如果当前 NS 中已有同名的类):

use \DateTime as NewDT;

答案 2

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


推荐