30

PHP5.3.8でDateTimeオブジェクトを宣言するときに何かが足りない

phpコントローラーに渡される確定日時のJSON文字列を取得します。

何らかの理由で、phpでDateTimeオブジェクトとしてマップされません。しかし、奇妙なことに。次の画像を参照してください。

  1. [式]ウィンドウ(右上)でわかるように、手順の前に、新しいDateTime(myVariable)が必要なものを正しく変換していることを確認しています。最初のウォッチでは、DateTimeコンストラクターに渡す変数。2番目のウォッチでは、式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
    

    ここに画像の説明を入力してください

そのため、奇妙なことに、EclipseのWatch Expressionsウィンドウは、実行エンジンのように機能していないか、またはその逆です。

もちろん、私はそれが反対であることを望みます(それは実行で機能し、ウォッチウィンドウでは機能しませんでした:))。

それで、何か考えはありますか?

4

2 に答える 2

76

あなたは現在、Acme\StoreBundle\Repository\DateTimenapespaceにいます。この場合、デフォルトの名前空間にアドレス指定するには\、クラス名の前に先頭を付ける必要があります。

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

それで

namespace foo;
$obj = new class();

名前空間class内の定義を見つけようとします。foo

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

classグローバル名前空間内で定義を見つけようとします。

別の方法として、を使用してクラスをインポートできます

use \DateTime;

またはエイリアスを作成します(現在のNSに同じ名前のクラスがすでにある場合):

use \DateTime as NewDT;
于 2012-05-31T22:10:06.913 に答える
6

名前空間を使用していて、\ DateTime(完全なqulifiedクラス名)の代わりに(現在の名前空間に対して)DateTimeを使用しようとしていると思います

于 2012-05-31T22:10:54.887 に答える