Рубрики
Uncategorized

Классы повторного использования кода признаков PHP и реализация множественного наследования

Автор оригинала: David Wong.

Эта статья иллюстрирует реализацию классов повторного использования кода признаков PHP и множественного наследования. Поделитесь для вашей справки следующим образом:

Предисловие

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

I. Концепция

Официальное руководство по PHP описывает признак как: Признак-это единый язык наследования, аналогичный PHP Механизм повторного использования кода 。 Чтобы уменьшить ограничения одного языка наследования, функция Trait позволяет разработчикам свободно использовать методы в отдельных классах в разных иерархиях. Семантика сочетания признаков и классов определяет способ снижения сложности и избежания типичных проблем, связанных с традиционным множественным наследованием и смешиванием классов. Черта похожа на девочку, но предназначена только для тонкого и последовательного сочетания функций. Не может быть создан самим признаком . Он добавляет комбинацию горизонтальных функций к традиционному наследованию; то есть наследование не требуется между несколькими классами приложения.

II. Использование классов признаков

Короче говоря, Признак-это грамматика, отличная от наследования. Определите класс признаков и используйте ключевое слово use в других классах Это немного похоже на использование пространств имен, но с другими значениями. После введения класса признаков в класс ключевое слово use эквивалентно require или include. Разница в том, что класс use Trait и текущий класс можно рассматривать как один и тот же класс, то есть текущий класс может использовать ключевое слово $this для вызова метода класса Trait.

Ниже приводится объяснение этого принципа:

Вы можете видеть, что текущий класс может просто использовать два класса признаков и вызывать методы в них, а не только наследование, но только один метод родительского класса.

3. Контроль доступа к классу признаков

Мы знаем, что наследование, если базовый класс является частным измененным элементом управления, то подклассы не могут быть вызваны. однако Черта характера Это отличается тем, что похоже на Require в текущем классе. Таким образом, независимо от того, является ли он публичным, защищенным или частным, его можно использовать напрямую. 。 Примерами являются следующие:

IV. Приоритетный контроль класса признаков

Порядок приоритета вызова между классом признаков и базовым классом, используемым в настоящее время и унаследованным, следующий: Текущий класс использования > Класс признаков > унаследованный базовый класс

Когда существует метод с таким же именем, классы с таким же именем перезаписываются в соответствии с приоритетом. Конкретными примерами являются следующие:

1. Класс признаков переопределяет базовый класс

2. Текущий класс переопределяет класс признаков

5. Контроль конфликтов между несколькими классами признаков

В PHP, если текущий класс использует два класса признаков, В то же время в обоих классах признаков существует метод с одинаковым именем, который приведет к фатальной ошибке, если конфликт не будет разрешен явно. В этом случае PHP официально предлагает два решения: 1、 Вместо ключевого слова Это ключевое слово указывает, какой метод класса признаков следует использовать при возникновении конфликта имен методов, то есть: Если класс C использует два класса признаков A и B, и в обоих классах A и B есть методы a и B, то вместо этого используется объявление решения конфликта, когда класс C использует A и B:

use A, B {
  B:: a instead of A; //a method conflicts using class B method a instead of class A method a
  A:: B instead of B; //b method conflict using class A method B instead of class B method B
}

2、 Как ключевое слово Метод с тем же именем обозначается как отдельное имя ключевым словом as и действует только на текущий класс. Примерами являются следующие:

use A, B {
  B:: a as c; //Declare a method of class B as c, acting on that class
  A:: B as d; // Declare that the B method of Class A is d, which acts on that class.
}

6. Отличия от наследования и прямого экземпляра

В текущей ситуации, когда одному классу необходимо использовать методы другого или нескольких классов, мы обычно думаем о способах наследования, непосредственного создания экземпляров другого или нескольких классов и так далее. Давайте сравним различия между этими методами и классами признаков. Наследование: Для наследования некоторые методы другого класса могут быть совершенно свободными, но для методов, которым необходимо повторно использовать несколько классов, PHP не поддерживает множественное наследование и может обращаться только к ним. Общедоступный и защищенный Метод; 2. Отличие от прямого создания экземпляра: мы также можем создавать экземпляры классов A и B непосредственно в текущем классе, но этот метод имеет противоположную сторону контроля диапазона доступа. Доступ только к общедоступным в классах A и B Методы; 3. Метод класса A и класса B может быть импортирован в текущий класс с помощью класса признаков, который можно рассматривать как часть текущего класса. Единственное отличие состоит в том, что может существовать метод с тем же именем текущего класса, который управляется порядком приоритета.

Дополнение: PHP Множественное наследование Пример

class Base{
  public function sayHello(){
    echo "hello ";
  }
}
trait SayWorld{
  public function sayHello(){
    parent::sayHello();
    echo "world".PHP_EOL;
  }
}
trait SayWorld2{
  public function sayHello2(){
    echo "PHP".PHP_EOL;
  }
}
class MyHelloWorld extends Base{
  use SayWorld,SayWorld2;
}
$s = new MyHelloWorld();
$s->sayHello();
$s->sayHello2();

Выходные результаты:

привет, мир PHP

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы PHP и использования операторов, Краткое описание использования строк Php и данных php +mysql. Введение в библиотечные операции и Краткое описание общих навыков работы с базами данных на PHP

Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.