Php 使用静态方法动态扩展模型

Php 使用静态方法动态扩展模型,php,laravel,octobercms,Php,Laravel,Octobercms,在我开发的插件中,我需要使用静态方法动态扩展另一个插件的模型。我不知道怎么做 在我的插件中,我有一个从Jiri/JKShop/Models/product继承的课程会话对象 在jiri_jkshop_products表中,我添加了一个is_课程字段 在创建产品对象之前,我想通过以下方式了解它是否是课程产品: if (\Jiri\JKShop\Models\Product::isCourse($productJson["product_id"])) { $product = \Plugin

在我开发的插件中,我需要使用静态方法动态扩展另一个插件的模型。我不知道怎么做

在我的插件中,我有一个从Jiri/JKShop/Models/product继承的课程会话对象

在jiri_jkshop_products表中,我添加了一个is_课程字段

在创建产品对象之前,我想通过以下方式了解它是否是课程产品:

if (\Jiri\JKShop\Models\Product::isCourse($productJson["product_id"])) {
    $product = \PluginAuthor\PluginName\Models\Session::find($productJson["product_id"]);
} else {
    $product = \Jiri\JKShop\Models\Product::find($productJson["product_id"]);
}
请问,如何在我的插件的plugin.php文件中动态地向产品模型添加静态方法

我希望这个想法与优雅的代码相对应,如果你有更好的,我也接受

提前感谢您,并向您致意,
Patrick

我认为您可以通过插件引导方法中的可扩展特性来实现这一点,就像这样

您可以利用laravel容器注册一个singleton来获得始终相同的实例,我认为这是一种很好的方法


我认为您可以通过插件引导方法中的可扩展特性来实现这一点,类似这样的东西

您可以利用laravel容器注册一个singleton来获得始终相同的实例,我认为这是一种很好的方法


你看过
\uu callStatic()
魔术方法了吗?如果您在一个对象上调用一个静态方法,而该对象实际上没有以编程方式设置该方法,则将调用该方法。这里的更多信息:谢谢Denis,这是一个不错的功能,但我的目的是不直接修改产品模型(我希望它保持完整性),而是在plugin.php引导函数中使用dynamicali。你看过
\u callStatic()
魔术方法了吗?如果您在一个对象上调用一个静态方法,而该对象实际上没有以编程方式设置该方法,则将调用该方法。这里的更多信息:谢谢Denis,这是一个很好的功能,但我的目的是不直接修改产品模型(我希望它保持完整性),但是在我的plugin.php引导函数中使用dynamicali谢谢OSdev,这很好,但是这样,您需要创建一个产品对象来测试is_课程字段。它可以工作,但我不觉得它很优雅,我可能错了。这意味着您首先创建一个对象来测试字段,然后再重新创建它,或者忘记它来创建好的字段。这是我第一次做的,但经过思考,我发现了添加动态静态方法的想法,与添加is_course方法相同,但是是静态的,但这可能吗?:-)你不能说“我想”,但是单态对象呢?我编辑了我的回答老实说我不知道:-)你的解决方案很有创意,但我一直在寻找更轻松的解决方案,所以我用我的poduct\u id在course\u id字段上做了一个简单的sql请求。无论如何,非常感谢你,Regardstanks OSdev,这很好,但是这样的话,你需要创建一个产品对象来测试is\u course字段。它可以工作,但我不觉得它很优雅,我可能错了。这意味着您首先创建一个对象来测试字段,然后再重新创建它,或者忘记它来创建好的字段。这是我第一次做的,但经过思考,我发现了添加动态静态方法的想法,与添加is_course方法相同,但是是静态的,但这可能吗?:-)你不能说“我想”,但是单态对象呢?我编辑了我的回答老实说我不知道:-)你的解决方案很有创意,但我正在寻找更轻的东西,所以我用我的poduct\u id在course\u id字段上提出了一个简单的sql请求。无论如何,非常感谢你,尊敬的