调用不同类中的静态方法,该方法调用同一类中的受保护方法



也许只是因为我累了,整天都在工作,也许是因为我并没有像我想象的那样真正掌握PHP类。但无论如何。这是我的问题。

我正在使用下面看到的这行代码调用静态方法,来自文件ServiceProvider.php

use webdevhacksLaraBlogResources;
public function boot() {
Resources::load();
}

现在在我名为Resources.php的资源类中,我有以下代码。

namespace webdevhacksLaraBlog;
use IlluminateSupportFacadesRoute;
use webdevhacksLaraBlogLaraBlog;

class Resources {
// Load Resources
public static function load() {
// Load Package Routes
return $this->loadRoutes();
}
// Load Routes
protected function loadRoutes() {
return Route::group($this->routeConfiguration(), function() {
$this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
});
}
}

我收到以下错误消息:

不在对象上下文中使用$this

现在,最终目标是让我能够使用静态方法加载多个资源load().我想在Resources.php中拥有加载多个资源(例如视图、迁移、路由等(的方法。

我在这里错过了什么?

问题是,您正在尝试从静态方法调用实例方法。

静态方法不与类的特定实例相关联;相反,它们仅与类本身相关联。这就是为什么您可以在不实际创建类实例的情况下调用静态方法的原因。

另一方面,实例方法只能在类的实际实例上调用,因此,永远不能从静态方法调用它们(除非静态方法实际创建了实例(。

为了使其正常工作,loadRoutes、loadRoutesFrom 和 routeConfiguration 都需要是静态方法。如果您希望能够更改 routeConfiguration,最好将其作为参数传递给 loadRoutes。像这样:

class Resources {
// Load Resources
public static function load($configuration) {
// Load Package Routes
return Resources::loadRoutes($configuration);
}
// Load Routes
protected static function loadRoutes($configuration) {
return Route::group($configuration, function() {
Resources::loadRoutesFrom(__DIR__ . '/../routes/web.php');
});
}
}

最新更新