php - 调用不同类中的静态方法,该方法调用同一类中的受保护方法
问题描述
也许只是因为我累了,整天都在工作,或者是因为我并没有像我想象的那样真正掌握 PHP 类。但无论如何。这是我的问题。
我正在使用下面的这行代码从文件中调用静态方法ServiceProvider.php
。
use webdevhacks\LaraBlog\Resources;
public function boot() {
Resources::load();
}
现在在名为 的资源类Resources.php
中,我有以下代码。
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');
});
}
}
我收到以下错误消息:
不在对象上下文中时使用 $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');
});
}
}
推荐阅读
- scala - Scala 2 隐式和 Scala 3 给定/使用之间的区别
- python - 如何从弹出窗口(Intent.ACTION_OPEN_DOCUMENT_TREE)获取绝对路径 kivy , andoid -11
- arrays - 在大数组(1,000)Swift 中查找 firstIndex 的最快方法
- ios - IOS Swift 4 AppDelegate 应用程序处理接收自定义 URL AirDrop 文件未命中
- python - IF 表达式包含意外的数字 - 可以缩短代码
- r - 如何过滤掉R中的一个因素
- c++ - 如何使用指针 C++ 访问结构中的数组元素
- c# - 有没有办法将数据从被调用的天蓝色函数返回给调用它的逻辑应用程序?
- reactjs - 使用 React Native 和 useEffect 获取
- python - 编写程序求矩阵中所有偶数之和,并求矩阵的转置