web-dev-qa-db-ja.com

PHPクラスDateTimeが見つかりません

PHP 5.3.8でDateTimeオブジェクトを宣言するときに何かが欠けている

私のphpコントローラーに渡される、明確な日付時刻を含むJSON文字列を取得します。

どういうわけか、phpでDateTimeオブジェクトとしてマッピングされていません。しかし、ちょっと変わっています。次の画像を参照してください。

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

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

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

23
ElPiter

現在Acme\StoreBundle\Repository\DateTime napespace。この場合、デフォルトの名前空間に対応するには、先頭に\のように、クラス名の前に

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

そう

namespace foo;
$obj = new class();

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

そして

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

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

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

use \DateTime;

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

use \DateTime as NewDT;
57
zerkms

名前空間を使用していて、\ DateTime(完全修飾クラス名)ではなく、DateTime(現在の名前空間に対して)を使用しようとしていると思います

4
marcelog