Рубрики
Uncategorized

Принцип и использование абстрактного, конечного и статического в PHP

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

В этой статье представлены принципы и использование абстрактного , конечного и статического в PHP. Для вашей справки приведем следующие сведения:

Аннотация (Аннотация)

PHP 5 поддерживает абстрактные классы и методы. Классы, определенные как абстрактные, не могут быть созданы. Если хотя бы один метод в классе объявлен абстрактным, то класс должен быть объявлен абстрактным. Метод, определенный как абстрактный, объявляет только свой вызывающий метод (параметр), Не может определить его конкретную реализацию функции

При наследовании абстрактного класса подкласс должен определять все абстрактные методы в родительском классе Кроме того, Управление доступом для этих методов должно быть таким же (или более мягким), как и в родительском классе 。 Например, если абстрактный метод объявлен защищенным, методы, реализованные в подклассе, должны быть объявлены защищенными или общедоступными (строгость: частный > защищенный > общедоступный), но не частными. кроме того, Методы должны вызываться соответствующим образом, то есть тип и количество требуемых параметров должны быть одинаковыми 。 Например, если необязательный параметр определен для подкласса, но не указан в объявлении родительского абстрактного метода, между этими двумя объявлениями нет конфликта. Это также относится к конструкторам из PHP 5.4. Объявления конструктора до PHP 5.4 могут быть разными.

Резюме:

  1. Абстрактные классы не могут быть созданы;
  2. Если в классе есть какие-либо абстрактные методы, класс также должен быть абстрактным;
  3. Абстрактные классы могут только объявлять режим вызова и параметры, но не могут определять конкретную реализацию функции;
  4. Подклассы, наследующие абстрактные классы, должны реализовывать все абстрактные методы абстрактных классов;
  5. Контроль доступа абстрактного метода, реализованного в подклассе, должен быть более строгим, чем у родительского класса;
  6. Вызывающий метод и количество параметров метода, реализованного в подклассе, должны совпадать с параметрами реализованного метода.

Например:

php
abstract class AbstractClass
{
  //Force subclasses to define these methods, not function implementations
  abstract protected function getValue();
  abstract protected function prefixValue($prefix);

  //Common method (non abstract method), subclass can not be overridden
  public function printOut() {
    print $this->getValue() . "\n";
  }
}

class ConcreteClass1 extends AbstractClass
{
  protected function getValue() {
    return "ConcreteClass1";
  }

  public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass1";
  }
}

class ConcreteClass2 extends AbstractClass
{
 //Access can be more relaxed
  public function getValue() {
    return "ConcreteClass2";
  }

  public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass2";
  }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>
prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>

окончательный

Если метод в родительском классе объявлен окончательным, дочерний класс не может переопределить метод. Если класс объявлен окончательным, он не может быть унаследован.

Это легко понять и не будет повторяться

статический

Если вы объявите свойство или метод класса статическим, вы сможете получить к нему прямой доступ без создания экземпляра класса. Доступ к статическим свойствам невозможен через объект, класс которого был создан (но статические методы могут).

Для совместимости с PHP 4 свойства и методы по умолчанию являются общедоступными, если не указан контроль доступа.

Поскольку статические методы не нужно вызывать через объекты, фиктивная переменная $this недоступна в статических методах.

Статические свойства не могут быть доступны объектам с помощью оператора” -“.

Вызов нестатического метода статически приводит к ошибке E_ на строгом уровне.

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

Начиная с PHP 5.3.0, классы могут вызываться динамически с помощью переменной. Но значением переменной не могут быть ключевые слова self, parent или static.

Резюме:

  1. К статическим методам можно получить прямой доступ без создания экземпляра;
  2. Объекты, созданные экземплярами класса, не могут получить доступ к статическим свойствам в классе, но могут получить доступ к статическим методам;
  3. Фиктивная переменная $this недоступна в статических методах;
  4. Статические свойства не могут быть доступны объектам с помощью оператора” -“;
  5. Вызов нестатического метода статически приводит к ошибке E_ строгого уровня;
  6. Статические атрибуты могут быть инициализированы только текстом или константой, а выражения не могут использоваться (возвращаемое функцией значение/Определение переменной/объекта);
  7. Вы можете использовать переменную для динамического вызова класса. Но значением переменной не могут быть ключевые слова self, parent или static.
staticValue() . "\n";
print $foo->my_static . "\n";   // Undefined "Property" my_static 

print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0

print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
  
 

 
  < title > static method example
  
<![CDATA[
<?php
class Foo {
  public static function aStaticMethod() {
    // ...
  }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname:: astaticmethod(); // since PHP 5.3.0
?>

Подробнее о содержании, связанном с PHP заинтересованные читатели могут ознакомиться с этой темой сайта: “Вводный учебник по объектно-ориентированному программированию PHP”, “Навыки работы с массивом PHP (массивом)”, “Вводный курс по основному синтаксису PHP”, “Краткое описание операций и использования операторов PHP”, “Краткое описание использования символьной строки (строки) PHP”, “Учебник по введению в работу с базой данных PHP + MySQL” и “Общая работа с базой данных PHP”. Краткое изложение навыков письма

Я надеюсь, что эта статья поможет вам в программировании на PHP.