面向对象编程:深入PHP的封装、继承和多态性!

文章目录

面向对象编程(OOP)是一种编程范式,它使用"对象"来设计软件。对象可以包含数据(属性)和代码(方法),可以相互交互以模拟现实世界中的实体和行为。

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


面向对象OOP的核心概念

  • :蓝图或模板,用于创建对象。
  • 对象:类的实例,具有属性和方法。
  • 封装:隐藏对象的内部状态和实现细节。
  • 继承:允许新类(子类)继承现有类(父类)的属性和方法。
  • 多态:允许不同类的对象对同一消息做出响应,但具体行为会有所不同。

定义类、创建对象

  • 使用class关键字定义类,通过 -> 访问实例属性
  • 使用new关键字创建类的对象。
php 复制代码
<?php
class Car {
    public $color; // 属性

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

    public function getColor() {
        return $this->color;
    }
}

$myCar = new Car("red");
echo $myCar->getColor(); // 输出: red

构造函数和析构函数

  • 构造函数:当对象被创建时自动调用的方法,用于初始化对象。
  • 析构函数:当对象被销毁时自动调用的方法。
php 复制代码
<?php
class Car {
    public function __construct($color) {
        echo "Car  color " . $color . "\n";
    }

    public function __destruct() {
        echo "Car 被销毁\n";
    }
}

$myCar = new Car("blue"); // 输出: Car color blue
unset($myCar); // 输出: Car 被销毁

访问修饰符

  • public:类外部和内部都可以访问。
  • protected:只能被类本身和子类访问。
  • private:只能被类本身访问。
php 复制代码
<?php
class Car {
    private $make;
    protected $model;
    public $year;

    public function setMake($make) {
        $this->make = $make;
    }
}

继承

子类可以继承父类的属性和方法。

php 复制代码
<?php
class Vehicle {
    public $type;

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

class Car extends Vehicle {
    public function run() {
        echo "120 km/h !\n";
    }
}

$myCar = new Car("宝马");
echo $myCar->type; // 输出: 宝马
$myCar->run(); // 输出: 120 km/h !

方法重写

子类可以重写父类的方法,以提供特定的实现。

php 复制代码
<?php
class Vehicle {
    public function start() {
        echo "Vehicle starts\n";
    }
}

class Car extends Vehicle {
    public function start() {
        echo "start ...\n";
    }
}

$myCar = new Car();
$myCar->start(); // 输出: start ...

接口和抽象类

  • 接口:定义了一组方法规范,但不实现它们。
  • 抽象类:不能被实例化,用于被其他类继承。
php 复制代码
<?php
interface Drivable {
    public function drive();
}

abstract class Vehicle {
    abstract public function drive();
}

class Car implements Drivable {
    public function drive() {
        echo "Car is driving\n";
    }
}

$myCar = new Car();
$myCar->drive(); // 输出: Car is driving

静态方法和属性

  • 静态方法:可以通过类直接调用,不需要实例化对象。
  • 静态属性:属于类本身,而不是类的实例。
php 复制代码
<?php
class Counter {
    public static $count = 0;

    public function __construct() {
        Counter::$count++;
    }
}

Counter::$count; // 输出: 0
$c1 = new Counter();
$c2 = new Counter();
echo Counter::$count; // 输出: 2

魔术方法

PHP提供了一些魔术方法,它们在特定情况下被自动调用,如__toString(), __call(), __get(), __set()等。

php 复制代码
<?php
class Product  {
    private $data = [];

    public function __toString() {
        return "toString Product";
    }


    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // 或者抛出异常
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

$product = new Product ();
$product->price = 9.99; // 设置属性
echo $product->price; // 输出: 9.99
echo $product  // toString Product

错误处理

错误处理概述

PHP提供了多种错误处理机制,包括:

  • 错误报告:控制哪些错误应该被报告。
  • 异常 :使用try...catch语句捕获和处理错误。
  • 错误抑制:临时忽略错误。

错误级别

PHP定义了多种错误级别,如E_ERROR, E_WARNING, E_NOTICE等。

php 复制代码
<?php
error_reporting(E_ALL); // 报告所有错误

异常处理

  • 使用try...catch语句来捕获和处理异常。
  • 使用finally块来执行无论是否发生异常都需要执行的代码。
  • 使用throw关键字抛出一个异常。
php 复制代码
<?php
try {
    // 尝试执行可能引发异常的代码
    throw new Exception("Something went wrong!");
} catch (Exception $e) {
    // 捕获并处理异常
    echo "Error: " . $e->getMessage();
} finally {
    echo "一定会执行.";
}

自定义异常

可以创建自定义异常类来扩展内置的Exception类。

php 复制代码
<?php
class MyException extends Exception {}

try {
    throw new MyException("Custom error message");
} catch (MyException $e) {
    echo $e->getMessage();
}

设置错误处理

可以使用set_error_handler函数设置自定义错误处理函数。

php 复制代码
<?php
function customError($errno, $errstr, $errfile, $errline) {
    // 错误处理逻辑
    echo "Error: $errstr";
}

set_error_handler("customError");

忽略错误

使用@运算符可以在执行代码时忽略错误,但这通常不是一个好习惯。

php 复制代码
<?php
@someFunctionThatMightFail();

错误日志

使用error_log函数将错误信息记录到日志文件。

php 复制代码
<?php
error_log("An error occurred: " . $error_message);

断言

使用assert函数来检查程序中的重要条件是否为真。

php 复制代码
<?php
assert('$x > 0', 'X must be greater than zero');

总结

现在你应该能够理解面向对象编程的基本概念和PHP中的错误处理机制,并能够使用它们来设计和实现复杂的软件系统。OOP提供了一种强大的工具,用于创建模块化、可重用和易于维护的代码。

相关推荐
乌啼霜满天2493 分钟前
JDBC编程---Java
java·开发语言·sql
色空大师15 分钟前
23种设计模式
java·开发语言·设计模式
Bruce小鬼28 分钟前
QT文件基本操作
开发语言·qt
2202_7544215433 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热40 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
懷淰メ1 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm1 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
宁静@星空1 小时前
006-自定义枚举注解
java·开发语言
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
武子康2 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot