Php 调用';在另一个类中,调用同一个类中的受保护方法

Php 调用';在另一个类中,调用同一个类中的受保护方法,php,laravel,laravel-6,Php,Laravel,Laravel 6,可能是因为我累了,整天都在工作,或者可能是因为我对PHP类的掌握不像我想的那样牢固。但无论如何。这是我的问题 我正在使用下面的代码行调用一个静态方法,该代码行来自文件ServiceProvider.php 使用webdevhacks\LaraBlog\Resources; 公共函数boot(){ 资源::load(); } 现在,在名为resources.php的资源类中,我有以下代码 名称空间webdevhacks\LaraBlog; 使用照明\支持\立面\路线; 使用webdevhacks

可能是因为我累了,整天都在工作,或者可能是因为我对PHP类的掌握不像我想的那样牢固。但无论如何。这是我的问题

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

使用webdevhacks\LaraBlog\Resources;
公共函数boot(){
资源::load();
}
现在,在名为
resources.php
的资源类中,我有以下代码

名称空间webdevhacks\LaraBlog;
使用照明\支持\立面\路线;
使用webdevhacks\LaraBlog\LaraBlog;
班级资源{
//加载资源
公共静态函数加载(){
//装载包裹路线
返回$this->loadRoutes();
}
//装货路线
受保护的函数loadRoutes(){
返回路由::组($this->routeConfiguration(),function()){
$this->loadRoutesFrom(_DIR__.'/../routes/web.php');
});
}
}
我收到以下错误消息:

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

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


我在这里遗漏了什么?

问题是,您试图从静态方法调用实例方法

静态方法不与类的特定实例相关联;相反,它们只与类本身相关联。这就是为什么可以调用静态方法而不实际创建类的实例

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

为了实现这一点,loadRoutes、LoadRouteFrom和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');
        });
    }
}

问题是,您试图从静态方法调用实例方法

静态方法不与类的特定实例相关联;相反,它们只与类本身相关联。这就是为什么可以调用静态方法而不实际创建类的实例

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

为了实现这一点,loadRoutes、LoadRouteFrom和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');
        });
    }
}

-
伪变量$this在声明为static的方法中不可用
因此,如何编写代码在static函数中执行loadRoutes()方法?问题:为什么首先使用静态方法?为什么不在
boot
方法中创建一个对象,然后按照它进行操作?@Waterlomatt我该怎么做?我对拉雷维尔的服务提供商很陌生
伪变量$this在声明为static的方法中不可用
因此,如何编写代码在static函数中执行loadRoutes()方法?问题:为什么首先使用静态方法?为什么不在
boot
方法中创建一个对象,然后按照它进行操作?@Waterlomatt我该怎么做?我对拉拉维尔的服务提供商很陌生。这一点现在非常有意义,让我走上了正确的轨道!我想我成功了。非常感谢。很高兴听到这个消息!这是非常有意义的现在,并已使我在正确的轨道上!我想我成功了。非常感谢。很高兴听到这个消息!