什么是SomeClass :: class。' @ someMethod' PHP中的语法模式?

时间:2018-06-15 05:16:45

标签: php laravel

我以前从未在PHP中看过这个,并且没有线索如何搜索这个。我正在提取一些Java示例,这实际上并没有帮助。

具体来说,我在主要Spark对象中的scriptVariables()方法中看到了Laravel的Spark。我知道这是做什么的,但是这与简单的写作有什么区别:SomeClass::someMethod()

如果存在,请告诉我手册中的正确位置。请指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

::class和静态调用::someMethod()之间的实际差异是任何对象上的::class都将返回类的FQCN(完全限定的类名)。采用以下示例类:

namespace Macondo\Buendia\Admin;

class User {}

运行以下内容;

echo Macondo\Buendia\Admin\User::class;

use Macondo\Buendia\Admin\User;
echo User::class;

两者都会回归:

Macondo\Buendia\Admin\User

这使得它变得相当容易,例如在Laravel的路由声明中创建一个体面的,持久的方法来定义控制器动作:

Route::get('/', App\Http\Controllers\HomeController::class . '@home');
Route::get('/dashboard', App\Http\Controllers\HomeController::class . '@dashboard');

https://laravel.com/docs/5.6/controllers#controllers-and-namespaces

要澄清一点,SomeController::class . '@someMethod' 不是静态调用。 Laravel将使用" Container"解决特定的控制器和方法。 (也称为控制/ ioc的反转)。