如何避免在命名空间类中使用反斜杠和"use"来调用全局类?

4

我有很多命名空间类,在其中对全局类进行了很多调用。

我有两个解决方案:

1- 在每个全局类调用中使用反斜杠 "\"

namespace Admin;

class UserController extends \BaseController{
  [...]
  public function update($id){
    $user = new \User::find($id);
    $user->username = \Input::get('username');
    $user->password = \Hash::make(\Input::get('password'));
    return \Redirect::action('UserController@index');
  }
  [...]
}

2- 我在每个命名空间类的开头使用"use"声明了许多全局类的使用。

namespace Admin;
use \BaseController;
use \User;
use \Input;
use \Hash;
use \Redirect;

class UserController extends BaseController{
  [...]
  public function update($id){
    $user = new User::find($id);
    $user->username = Input::get('username');
    $user->password = Hash::make(Input::get('password'));
    return Redirect::action('UserController@index');
  }
  [...]
}

在这两种情况下,我认为代码不够优雅。 有没有办法避免这种情况? 我希望在保留命名空间的前提下,在每个命名空间的类中调用全局类时不需要使用“using”。

1
这基本上是你的两个选择。选一个吧。 - deceze
我认为你提到的第二种方法更合适,因为它更清晰地定义了你使用的命名空间。另外请注意,你可以使用"use User;"代替"use \User;"。 - tliokos
是的,但我是否必须为每个命名空间类重复使用"use"?我能否仅一次为整个命名空间定义一个"use"列表? - Thiezar
1个回答

6

当你使用use时,无需添加斜杠,只需:

use BaseController;
use User;
use Input;
use Hash;
use Redirect;

暗示着PHP会尝试从根 (\) 开始获取这些内容。

但是如果您的类有命名空间,就无法避免使用use。这是告诉PHP这些文件不在您的命名空间中的方法。


正如我之前所评论的...我需要为每个命名空间类重复编写这一组“用”吗?我希望只为整个命名空间定义它们一次...有办法吗? - Thiezar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接