调用位于不同 class 中的静态方法,调用同一 class 中的受保护方法

Invoking a static method that's in a different class, that calls a protected method inside that same class

可能只是因为累了,工作了一整天,也可能是因为我对PHP class的理解并不像我想的那样做过。但无论如何。这是我的问题。

我正在使用文件 ServiceProvider.php.

中的这行代码调用静态方法,如下所示
use webdevhacks\LaraBlog\Resources;
public function boot() {
Resources::load();
}

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

namespace webdevhacks\LaraBlog;

use Illuminate\Support\Facades\Route;
use webdevhacks\LaraBlog\LaraBlog;


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');
        });
    }
}

我收到以下错误消息:

Using $this when not in object context

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

我在这里错过了什么?

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

静态方法与您的 class 的特定实例无关;相反 它们仅与 class 本身相关联 。这就是为什么您可以在不实际创建 class.

的实例的情况下调用静态方法的原因

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

为了让它工作,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');
        });
    }
}