В этой статье рассматривается разница между самостоятельным и статическим в объектно-ориентированном программировании PHP. Чтобы поделиться с вами для вашей справки, следующим образом:
1. Предположим, у нас есть класс автомобиля, который имеет два метода: модель()
и получить модель ()|/.
class Car{ public function model(){ //Here we use the keyword self self::getModel(); } protected function getModel(){ echo 'I am car'; } }
После создания экземпляра метод вызова является:
$car = new Car(); $car - > model(); // output: I am car
Ключевое слово self заставляет нас вызывать метод getmodel () класса car и выводить текст “Я-автомобиль”.
2. Добавьте новый класс в качестве подкласса класса автомобилей:
class Mercedes extends Car { protected function getModel() { echo "I am mercedes"; } } //Call the model () method after instantiation $mercedes = new Mercedes(); $mercedes->model();
Мы знаем, что подкласс унаследует метод родительского класса, и мы переопределяем метод getmodel () в подклассе Mercedes. В этом случае создание экземпляра класса Mercedes и вызов метода model() выведет строку “Я автомобиль” или “Я Мерседес”?
Вы можете подумать, что результат таков: я-Мерседес.
Но фактический результат таков:
Я-машина
почему?
3. Принцип работы ключевого слова self заключается в следующем: Он вызовет метод текущего класса 。
поскольку model()
Метод определен только в классе автомобиля, поэтому для self текущий класс-это класс автомобиля. self::getModel()
Предназначен для вызова метода getmodel в классе car.
Кажется, что это не то, чего мы хотим, как это решить?
4. Решение 1. перезапись в классе Mercedes модель()
Метод
class Mercedes extends Car { public function model(){ //Here we use the keyword self self::getModel(); } protected function getModel() { echo "I am mercedes"; } } //Call the model () method after instantiation $mercedes = new Mercedes(); $Mercedes - > model(); // output: I am Mercedes
Но это определенно не лучший способ. Методы были переписаны, и они все еще наследуют Мао.
5. Решение 2. измените ключевое слово self на статическое
class Car{ public function model(){ //Here we use the keyword static static::getModel(); } protected function getModel(){ echo 'I am car'; } }
Мы просто заменили self в классе автомобилей на static и не изменили класс Mercedes.
В это время мы называем:
$mercedes = new Mercedes(); $Mercedes - > model(); // output: I am Mercedes
6, краткое изложение
В php 5.3 добавлена новая функция, называемая Задержка статической привязки 。 Может помочь нам достичь полиморфного 。
Проще говоря, Задержка статической привязки означает, что когда мы вызываем унаследованный метод с использованием ключевого слова static, он свяжет вызывающий класс во время выполнения 。
Для получения дополнительной информации о PHP, пожалуйста, ознакомьтесь со следующими разделами: Введение в объектно-ориентированное программирование PHP, навыки работы с массивами PHP, введение в базовый синтаксис PHP, краткое описание операций PHP и использования операторов, краткое описание использования строк PHP, введение в работу с базой данных PHP + MySQL и общие навыки работы с базой данных PHP
Я надеюсь, что эта статья будет полезна для программирования на PHP.