PHP 5.3.8でDateTimeオブジェクトを宣言するときに何かが欠けている
私のphpコントローラーに渡される、明確な日付時刻を含むJSON文字列を取得します。
どういうわけか、phpでDateTimeオブジェクトとしてマッピングされていません。しかし、ちょっと変わっています。次の画像を参照してください。
式ウィンドウ(右上)でわかるように、ステップの前に、新しいDateTime(myVariable)が必要なものを正しく変換していることを確認しています。最初のウォッチでは、DateTimeコンストラクターに渡す変数。 2番目のウォッチでは、式newDateTime(myVariable)は既にDateTimeObjectとしてマップされています。どうやらここまで元気です。
しかし、残念なことに、私が先に進んで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の[ウォッチ式]ウィンドウが実行エンジンと同じように機能していない、またはその逆です。
もちろん、私はそれが反対であることを望みます(それはウォッチウィンドウではなく実行で機能しました:))。
それで、何か考えはありますか?
現在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;
名前空間を使用していて、\ DateTime(完全修飾クラス名)ではなく、DateTime(現在の名前空間に対して)を使用しようとしていると思います