CakePHP3のControllerクラス内でDateTimeクラスのインスタンスを生成しようとすると「Class ‘App\Controller\DateTime’ not found」となりインスタンスが生成できない。
原因はnamespaceが指定されているためスコープが変わり、「App\Controller」以下を探してしまい「App\Controller\DateTime」クラスが見つからないためエラーとなってしまう。
解決するにはクラス名を非修飾名(Unqualified name)から、完全修飾名(Fully qualified name)に変える。
名前空間と修飾名についてはPHPマニュアルの名前空間の使用法: 基本編を参照する。
- 検証のための最小のコード(対応前):
<?php namespace Foo\Bar; date_default_timezone_set('Asia/Tokyo'); $today = new DateTime(); var_dump($today);
- 実行結果:
$ php code.php PHP Fatal error: Class 'Foo\Bar\DateTime' not found in /Users/stupiddog/not-found-datetime/code.php on line 4 Fatal error: Class 'Foo\Bar\DateTime' not found in /Users/stupiddog/not-found-datetime/code.php on line 4
- 検証のための最小のコード(対応後):
<?php namespace Foo\Bar; date_default_timezone_set('Asia/Tokyo'); $today = new \DateTime(); var_dump($today);
- 実行結果:
$ php code.php object(DateTime)#1 (3) { ["date"]=> string(26) "2017-11-01 20:20:10.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "Asia/Tokyo" }