Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengaturcaraan berorientasikan objek PHP lanjutan: memahami polimorfisme dan warisan

Pengaturcaraan berorientasikan objek PHP lanjutan: memahami polimorfisme dan warisan

王林
王林asal
2024-05-08 18:06:01571semak imbas

Dalam pengaturcaraan berorientasikan objek, polimorfisme membenarkan objek bertindak balas kepada panggilan kaedah yang sama dengan cara yang berbeza, manakala pewarisan membenarkan subkelas untuk mewarisi dan melanjutkan fungsi kelas induk. Polimorfisme ditunjukkan dalam tindak balas pembezaan jenis objek yang berbeza kepada kaedah yang sama, seperti kaedah speak() objek haiwan, anjing dan kucing. Warisan dicerminkan dalam subkelas yang mewarisi data dan kaedah daripada kelas induk Contohnya, kelas pekerja mewarisi nama dan umur daripada kelas manusia, dan menambah atribut gaji baharu. Dalam kes sebenar, kelas kiwi mewarisi nama buah kelas buah, manakala kelas kereta sukan menulis semula kaedah getType() dalam kelas induk melalui polimorfisme, merealisasikan respons yang berbeza kepada kaedah yang sama dalam kelas kereta, mengembalikan "kereta" " dan "kereta" masing-masing. Taip maklumat untuk "kereta sukan".

PHP 对象导向编程进阶:理解多态和继承

Pengaturcaraan Berorientasikan Objek PHP Lanjutan: Memahami Polimorfisme dan Warisan

Gambaran Keseluruhan

Polymorphism dan warisan ialah dua konsep asas berorientasikan objek (OP). Polimorfisme membenarkan objek bertindak balas kepada panggilan kaedah yang sama dengan cara yang berbeza, manakala pewarisan membenarkan penciptaan kelas baharu yang mewarisi dan melanjutkan fungsi kelas sedia ada.

Polymorphism

Polymorphism membenarkan objek melakukan operasi berbeza bergantung pada jenisnya.

class Animal {
    public function speak() {
        echo "Animal speaks\n";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Dog barks\n";
    }
}

class Cat extends Animal {
    public function speak() {
        echo "Cat meows\n";
    }
}

$dog = new Dog();
$dog->speak();  // 输出:Dog barks

$cat = new Cat();
$cat->speak();  // 输出:Cat meows

Warisan

Warisan membolehkan penciptaan kelas baharu (subkelas) yang mewarisi data dan kaedah daripada kelas sedia ada (kelas induk).

class Person {
    protected $name;
    protected $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function getName() {
        return $this->name;
    }
}

class Employee extends Person {
    private $salary;

    public function __construct($name, $age, $salary) {
        parent::__construct($name, $age);  // 调用父类构造函数
        $this->salary = $salary;
    }

    public function getSalary() {
        return $this->salary;
    }
}

$employee = new Employee("John Doe", 30, 50000);
echo "Employee name: " . $employee->getName() . "\n";
echo "Employee salary: " . $employee->getSalary() . "\n";

Kes praktikal

Kelas buah-buahan dan kelas kiwi (warisan)

class Fruit {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

class Kiwi extends Fruit {
    public function __construct() {
        parent::__construct("Kiwi");
    }
}

$kiwi = new Kiwi();
echo "Fruit name: " . $kiwi->getName() . "\n";

Kelas kereta dan kelas kereta sport (polimorfisme)

class Car {
    protected $make;
    protected $model;

    public function __construct($make, $model) {
        $this->make = $make;
        $this->model = $model;
    }

    public function getType() {
        return "Car";
    }
}

class SportsCar extends Car {
    public function getType() {
        return "Sports Car";
    }
}

$car = new Car("Toyota", "Camry");
$sportsCar = new SportsCar("Ferrari", "F430");

echo "Car type: " . $car->getType() . "\n";
echo "Sports car type: " . $sportsCar->getType() . "\n";

Atas ialah kandungan terperinci Pengaturcaraan berorientasikan objek PHP lanjutan: memahami polimorfisme dan warisan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn