如何重写类中的protected方法

如何改写类中的protected方法?around

首先,不太清楚你的问题。但是如果你是想重写某一个方法的话,除了Abstruct方法/类除外。
都可以在di.xml里面来声明重写

Plugin 是你不通过重写来修改某个方法的行为。如果你是想单纯改写,preference比较推荐。

2 个赞
1 个赞

除了Abstruct方法/类除外,都可以在di.xml里面来声明重写。
说的就是下面这种不能重写对吗?那该怎么办呢?

Plugin可以用于这种情况的。如果你要操作的对象是abstruct class

1 个赞

希望你完整解决之后,自己再完整回答一下这个提问.
这样能帮助更多的朋友.

1 个赞

@huang1994,但是我这样写了没有生效。

我想要修改
我的项目\vendor\magento\module-catalog\Model\Layer\Filter\AbstractFilter.php
这个类下面的isOptionReducesResults方法

    protected function isOptionReducesResults($optionCount, $totalSize)
    {
        return $optionCount < $totalSize;
    }

我的修改方式如下:
1、我的项目\app\code\Gos\MagentoCatalogEnhance\etc\di.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Catalog\Model\Layer\Filter\AbstractFilter" type="Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter" />
    </config>

2、我的项目\app\code\Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter.php

    <?php
    namespace Gos\MagentoCatalogEnhance\Plugin\Layer\Filter;
    
    abstract class AbstractFilter extends \Magento\Framework\DataObject implements FilterInterface
    {
    
        protected function isOptionReducesResults($optionCount, $totalSize)
        {
            return $optionCount <= $totalSize;
        }
    
    }

但是没有生效,请问哪里不对要修改,求帮助。

我前面已经说过了,abstruct的方法和类不能用

<preference for="Magento\Catalog\Model\Layer\Filter\AbstractFilter" type="Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter" />

的形式重写

@huang1994,那该怎么写呢?能提供个方法吗?

@huang1994,你不是说可以这样的吗?

这是Plugin方式的教程,你参考一下
你的这个问题问的真的很奇怪了。没人知道你到底要怎么改。。。