调用位于不同 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');
});
}
}
可能只是因为累了,工作了一整天,也可能是因为我对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');
});
}
}