В этой статье рассматривается разница между самостоятельным и статическим в объектно-ориентированном программировании 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.