На самом деле разница есть, но не всегда (ну, верно).
В конструкции use
вам никогда не придется «упоминать» ведущую \
. Встроенный вам никогда не придется, если класс находится в том же пространстве имен, или если вы используете импорт (импортированный с use ns
).
Но иногда вы должны:
namespace foo;
class bar extends \baz\Bar {
Вы используете неопределенный / неизвестный / не импортированный встроенный класс, поэтому вы должны указать его источник.
Другой пример - классы без пространства имен, используемые в пространстве имен, встроенные:
namespace foo;
$dt = new \DateTime;
Рекомендуется импортировать ВСЕ классы, необходимые текущему файлу. Заявление об использовании очень, очень, очень, очень дешево, поэтому не сдерживайтесь.
namespace foo;
use baz\Bar AS OtherBar;
use \DateTime;
class Bar extends OtherBar { // or something like that; in this case (same class name) it's tricky
function __construct() {
$dt = new DateTime;
редактировать 1
Кроме того, не забывайте использовать полностью именованные имена классов при передаче их в виде строк, даже если вы находитесь в нужном пространстве имен:
namespace foo;
$class = 'foo\bar';