面向对象编程:深入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提供了一种强大的工具,用于创建模块化、可重用和易于维护的代码。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端