2012-05-31 23 views
13

Falta algo cuando se declara un objeto DateTime en PHP 5.3.8PHP clase DateTime no encontrado

me sale una cadena JSON con una fecha y hora determinada que se pasa al controlador de php.

Por alguna razón, no estoy logrando que se mapee como un objeto DateTime en php. Pero de una manera extraña. Vea las siguientes imágenes:

  1. Como se puede ver en la ventana de Expresiones (arriba a la derecha), antes de la etapa, estoy comprobando que la nueva DateTime (myVariable) está trayendo y transformar correctamente lo que necesito. En el primer reloj, la variable pasa al constructor DateTime. En el segundo reloj, la expresión newDateTime (myVariable) ya se asignó como un DateTimeObject. Aparentemente bien hasta aquí.

    enter image description here

  2. Pero, por desgracia, cuando voy hacia adelante y presione F6, la siguiente excepción (véase también la imagen de abajo) se lanza:

    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

Entonces, curiosamente, la ventana Watch Expressions de Eclipse no funciona como el motor de ejecución y/o viceversa.

Por supuesto, preferiría que fuera lo contrario (Funcionó en la ejecución y no en la ventana del reloj :)).

¿Alguna idea?

Respuesta

37

Actualmente se encuentra en el Acme\StoreBundle\Repository\DateTime napespace. Para hacer frente al espacio de nombres por defecto en este caso hay que poner conduce \ antes de que su nombre de clase, como

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

por lo

namespace foo; 
$obj = new class(); 

intentará encontrar class definición dentro foo espacio de nombres.

Y

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

intentará encontrar class definición dentro del espacio de nombres global.

Como alternativa podría importar la clase utilizando

use \DateTime; 

o crear alias (en caso de que si ya tiene la clase con el mismo nombre en la corriente NS):

use \DateTime as NewDT; 
+0

Dicha buena respuesta (y rápida). ¡Lo hizo! :) Muchas gracias. – ElPiter

+3

también podría poner 'use DateTime;' en la parte superior, y luego podrá usarlo sin barra diagonal. –

+0

@Dan Lee: ¡buena nota! – zerkms

2

supongo Está utilizando espacios de nombres y tratando de usar DateTime (relativo al espacio de nombres actual) en lugar de \ DateTime (el nombre de la clase completa)