Почему PHP позволяет делать защищенные и частные методы общедоступными посредством переопределения в подклассах?

Немного поигрался, я обнаружил, что получаю сообщение об ошибке при переопределении методов суперкласса в подклассе, когда я делаю следующее:

  • Переопределите метод защищенного суперкласса частным методом подкласса
  • Переопределите общедоступный метод подкласса. метод суперкласса с защищенным или частным методом подкласса

Однако, если я сделаю это в другом направлении, ошибка не будет:

  • Переопределение частного метода суперкласса с помощью метода защищенного или открытого подкласса
  • Переопределение защищенного суперкласса метод с общедоступным методом подкласса

Это кажется мне противоречащим интуиции - я ожидал, что он будет работать наоборот, чтобы обеспечить скрытие и инкапсуляцию информации. Похоже, что это допускает плохой дизайн, позволяя открывать внутренние компоненты таким образом, чтобы это могло нарушить работу других методов, и я не вижу случая, когда это было бы хорошей идеей. Почему это было реализовано таким образом и что я упустил?

Также, является ли это стандартной практикой для других языков программирования?

12
задан Matt Gibson 21 February 2012 в 12:35
поделиться