Laravel5:什么更好,类名称为字符串或Classname :: class

时间:2015-10-16 21:19:28

标签: php class laravel namespaces

在Laravel的许多文件中,也许在其他框架中,你必须指定一个类名。

您可以使用" :: class"

编写它
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

或作为字符串:

App\Models\User::class

嗯,使用第一个变体,类会在发生时立即加载。对于第二个变体,我猜它会在它被使用时加载。

哪一个更好还是推荐?在Laravel默认配置文件中始终是" :: class"使用变体。

1 个答案:

答案 0 :(得分:2)

不,实际上App\Models\User::class是更好的方法,因为::class返回类的完全限定名称。这样更方便,更不容易出错。例如:

namespace Some\Name\Space;

use vendor\package\Foo;
use vendor\package\Bar;

class Foo {

    public  function  someMethod()
    {
        // You can't use app('Bar'), You need the FQN
        // So it's possible using the following approach
        $bar = app(Bar::CLASS); // vendor\package\Bar
        $foo = new Foo($bar);

    }
}

只需使用Bar::CLASS即可轻松使用完全限定名称,因此,app(Bar::CLASS)将成为app('vendor\package\Bar')