文章目录
- 面向对象OOP的核心概念
- 定义类、创建对象
- 构造函数和析构函数
- 访问修饰符
- 继承
- 方法重写
- 接口和抽象类
- 静态方法和属性
- 魔术方法
- 错误处理
- 错误处理概述
- 错误级别
- 异常处理
- 自定义异常
- 设置错误处理
- 忽略错误
- 错误日志
- 断言
- 总结
面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据(属性)和代码(方法),可以相互交互以模拟现实世界中的实体和行为。
正文开始
,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢
💖💖💖
面向对象OOP的核心概念
- 类:蓝图或模板,用于创建对象。
- 对象:类的实例,具有属性和方法。
- 封装:隐藏对象的内部状态和实现细节。
- 继承:允许新类(子类)继承现有类(父类)的属性和方法。
- 多态:允许不同类的对象对同一消息做出响应,但具体行为会有所不同。
定义类、创建对象
- 使用
class
关键字定义类,通过->
访问实例属性 - 使用
new
关键字创建类的对象。
<?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
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
class Car {private $make;protected $model;public $year;public function setMake($make) {$this->make = $make;}
}
继承
子类可以继承父类的属性和方法。
<?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
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
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
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
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
error_reporting(E_ALL); // 报告所有错误
异常处理
- 使用
try
…catch
语句来捕获和处理异常。 - 使用
finally
块来执行无论是否发生异常都需要执行的代码。 - 使用
throw
关键字抛出一个异常。
<?php
try {// 尝试执行可能引发异常的代码throw new Exception("Something went wrong!");
} catch (Exception $e) {// 捕获并处理异常echo "Error: " . $e->getMessage();
} finally {echo "一定会执行.";
}
自定义异常
可以创建自定义异常类来扩展内置的Exception
类。
<?php
class MyException extends Exception {}try {throw new MyException("Custom error message");
} catch (MyException $e) {echo $e->getMessage();
}
设置错误处理
可以使用set_error_handler
函数设置自定义错误处理函数。
<?php
function customError($errno, $errstr, $errfile, $errline) {// 错误处理逻辑echo "Error: $errstr";
}set_error_handler("customError");
忽略错误
使用@
运算符可以在执行代码时忽略错误,但这通常不是一个好习惯。
<?php
@someFunctionThatMightFail();
错误日志
使用error_log
函数将错误信息记录到日志文件。
<?php
error_log("An error occurred: " . $error_message);
断言
使用assert
函数来检查程序中的重要条件是否为真。
<?php
assert('$x > 0', 'X must be greater than zero');
总结
现在你应该能够理解面向对象编程的基本概念和PHP中的错误处理机制,并能够使用它们来设计和实现复杂的软件系统。OOP提供了一种强大的工具,用于创建模块化、可重用和易于维护的代码。