博客
关于我
1.19 PHP 面向对象——《跟老吕学PHP》
阅读量:797 次
发布时间:2023-03-29

本文共 4206 字,大约阅读时间需要 14 分钟。

PHP 面向对象编程:核心概念与实践指南

面向对象编程(OOP)是PHP编程中的核心范式,它通过将现实世界中的事物抽象为类和对象,使得代码更加结构化、可维护和可扩展。本文将深入探讨PHP中的面向对象编程概念,包括类、对象、成员变量、成员函数、继承、多态、重载、抽象性、封装等关键点,并提供实践示例。

类(Class)与对象(Object)

在PHP中,类是对象的蓝图或模板,定义了对象的属性和行为。类通过class关键字创建,例如:

class Person {    public $name;    public $age;    public function __construct($name, $age) {        $this->name = $name;        $this->age = $age;    }    public function sayHello() {        echo "Hello, my name is " . $this->name . " and I'm " . $this->age . " years old.";    }}$john = new Person("John Doe", 30);$john->sayHello(); // 输出: Hello, my name is John Doe and I'm 30 years old.
  • 类定义:使用class关键字定义类,包含属性和方法。
  • 对象实例化:通过new关键字创建对象,例如$john = new Person("John Doe", 30)
  • 构造函数:定义在类中,用于初始化对象属性,通常与new运算符结合使用。

成员变量与成员函数

类的属性和方法可以通过访问修饰符(public、protected、private)控制访问权限。

公共成员变量(Public)

可在类和外部访问,例如:

class Person {    public $name;    public $age;    public function __construct($name, $age) {        $this->name = $name;        $this->age = $age;    }    public function sayHello() {        echo "Hello, my name is " . $this->name . " and I'm " . $this->age . " years old.";    }}

私有成员变量(Private)

仅在类内部访问,例如:

class Person {    private $socialSecurityNumber;    public function getSocialSecurityNumber() {        return $this->socialSecurityNumber;    }    public function setSocialSecurityNumber($number) {        $this->socialSecurityNumber = $number;    }}

受保护成员变量(Protected)

仅在类和子类中访问,例如:

class Person {    protected $id;}class Employee extends Person {    public function getEmployeeId() {        return $this->id;    }}

继承与多态

继承允许子类共享父类属性和方法,通过extends关键字实现。多态通过方法重写实现不同的行为。

继承示例

class Animal {    protected $name;    public function setName($name) {        $this->name = $name;    }    public function getName() {        return $this->name;    }}class Dog extends Animal {    public function makeSound() {        echo "Woof!";    }}$dog = new Dog();$dog->setName("Buddy");$dog->makeSound(); // 输出: Woof!

多态示例

interface Shape {    public function draw();}class Circle implements Shape {    public function draw() {        echo "Drawing a circle.";    }}class Rectangle implements Shape {    public function draw() {        echo "Drawing a rectangle.";    }}function drawShape(Shape $shape) {    $shape->draw();}$circle = new Circle();$rectangle = new Rectangle();drawShape($circle); // 输出: Drawing a circle.drawShape($rectangle); // 输出: Drawing a rectangle.

构造函数与析构函数

构造函数初始化对象,析构函数清理资源。

构造函数

class Person {    public function __construct($name, $age) {        $this->name = $name;        $this->age = $age;    }}$john = new Person("John Doe", 30);

析构函数

class Person {    private $resource;    public function __construct() {        $this->resource = fopen("somefile.txt", "r");    }    public function __destruct() {        fclose($this->resource);        echo "资源已清理。";    }}

##封装与重载

通过访问修饰符实现封装,PHP支持默认参数和可变参数列表实现重载。

封装示例

class Person {    private $name;    private $age;    public function setName($name) {        $this->name = $name;    }    public function getName() {        return $this->name;    }}

重载示例

class Rectangle {    public function __construct($width, $height) {        $this->width = $width;        $this->height = $height;    }    public function getArea() {        return $this->width * $this->height;    }    public function getPerimeter() {        return 2 * ($this->width + $this->height);    }}

抽象类与接口

抽象类定义通用行为,子类实现具体方法。接口定义方法签名,子类实现接口。

抽象类示例

abstract class Shape {    abstract public function draw();    public function resize($scale) {        echo "Resizing shape by scale factor: " . $scale;    }}class Circle extends Shape {    public function draw() {        echo "Drawing a circle.";    }}

接口示例

interface Shape {    public function getArea();    public function getPerimeter();}class Rectangle implements Shape {    private $width;    private $height;    public function __construct($width, $height) {        $this->width = $width;        $this->height = $height;    }    public function getArea() {        return $this->width * $this->height;    }    public function getPerimeter() {        return 2 * ($this->width + $this->height);    }}

总结

PHP的面向对象编程通过类、对象、继承、多态等机制,将现实世界中的事物抽象为代码单元。通过合理使用封装、构造函数和析构函数,可以提高代码的可维护性和可扩展性。面向对象编程不仅使代码更结构化,还能提升开发效率和代码质量。

转载地址:http://drhfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现OCR文字识别(附完整源码)
查看>>
Objective-C实现odd even sort奇偶排序算法(附完整源码)
查看>>
Objective-C实现page rank算法(附完整源码)
查看>>
Objective-C实现PageRank算法(附完整源码)
查看>>
Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
查看>>
Objective-C实现perfect cube完全立方数算法(附完整源码)
查看>>
Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
查看>>
Objective-C实现pollard rho大数分解算法(附完整源码)
查看>>
Objective-C实现quick select快速选择算法(附完整源码)
查看>>
Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
查看>>
Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
查看>>
Objective-C实现RedBlackTree红黑树算法(附完整源码)
查看>>
Objective-C实现redis分布式锁(附完整源码)
查看>>
Objective-C实现reverse letters反向字母算法(附完整源码)
查看>>
Objective-C实现ripple adder涟波加法器算法(附完整源码)
查看>>
Objective-C实现RodCutting棒材切割最大利润算法(附完整源码)
查看>>
Objective-C实现Romberg算法(附完整源码)
查看>>
Objective-C实现round robin循环赛算法(附完整源码)
查看>>