В этой статье представлены принципы и использование абстрактного , конечного и статического в PHP. Для вашей справки приведем следующие сведения:
Аннотация (Аннотация)
PHP 5 поддерживает абстрактные классы и методы. Классы, определенные как абстрактные, не могут быть созданы. Если хотя бы один метод в классе объявлен абстрактным, то класс должен быть объявлен абстрактным. Метод, определенный как абстрактный, объявляет только свой вызывающий метод (параметр), Не может определить его конкретную реализацию функции 。
При наследовании абстрактного класса подкласс должен определять все абстрактные методы в родительском классе Кроме того, Управление доступом для этих методов должно быть таким же (или более мягким), как и в родительском классе 。 Например, если абстрактный метод объявлен защищенным, методы, реализованные в подклассе, должны быть объявлены защищенными или общедоступными (строгость: частный > защищенный > общедоступный), но не частными. кроме того, Методы должны вызываться соответствующим образом, то есть тип и количество требуемых параметров должны быть одинаковыми 。 Например, если необязательный параметр определен для подкласса, но не указан в объявлении родительского абстрактного метода, между этими двумя объявлениями нет конфликта. Это также относится к конструкторам из PHP 5.4. Объявления конструктора до PHP 5.4 могут быть разными.
Резюме:
- Абстрактные классы не могут быть созданы;
- Если в классе есть какие-либо абстрактные методы, класс также должен быть абстрактным;
- Абстрактные классы могут только объявлять режим вызова и параметры, но не могут определять конкретную реализацию функции;
- Подклассы, наследующие абстрактные классы, должны реализовывать все абстрактные методы абстрактных классов;
- Контроль доступа абстрактного метода, реализованного в подклассе, должен быть более строгим, чем у родительского класса;
- Вызывающий метод и количество параметров метода, реализованного в подклассе, должны совпадать с параметрами реализованного метода.
Например:
prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>окончательный
Если метод в родительском классе объявлен окончательным, дочерний класс не может переопределить метод. Если класс объявлен окончательным, он не может быть унаследован.
Это легко понять и не будет повторяться
статический
Если вы объявите свойство или метод класса статическим, вы сможете получить к нему прямой доступ без создания экземпляра класса. Доступ к статическим свойствам невозможен через объект, класс которого был создан (но статические методы могут).
Для совместимости с PHP 4 свойства и методы по умолчанию являются общедоступными, если не указан контроль доступа.
Поскольку статические методы не нужно вызывать через объекты, фиктивная переменная $this недоступна в статических методах.
Статические свойства не могут быть доступны объектам с помощью оператора” -“.
Вызов нестатического метода статически приводит к ошибке E_ на строгом уровне.
Как и все другие статические переменные PHP, статические свойства могут быть инициализированы только текстом или константами, а не выражениями. Таким образом, вы можете инициализировать статическое свойство как целое число или массив, но не как возвращаемое значение другой переменной или функции или указывать на объект.
Начиная с PHP 5.3.0, классы могут вызываться динамически с помощью переменной. Но значением переменной не могут быть ключевые слова self, parent или static.
Резюме:
- К статическим методам можно получить прямой доступ без создания экземпляра;
- Объекты, созданные экземплярами класса, не могут получить доступ к статическим свойствам в классе, но могут получить доступ к статическим методам;
- Фиктивная переменная $this недоступна в статических методах;
- Статические свойства не могут быть доступны объектам с помощью оператора” -“;
- Вызов нестатического метода статически приводит к ошибке E_ строгого уровня;
- Статические атрибуты могут быть инициализированы только текстом или константой, а выражения не могут использоваться (возвращаемое функцией значение/Определение переменной/объекта);
- Вы можете использовать переменную для динамического вызова класса. Но значением переменной не могут быть ключевые слова 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.