php 实现类
PHP 实现类的基本语法
在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法:
class ClassName {
// 属性(成员变量)
public $property;
// 方法(成员函数)
public function method() {
// 方法体
}
}
类的属性
属性是类的成员变量,用于存储数据。可以设置访问修饰符(如 public、protected、private)控制可见性:
class User {
public $name; // 公共属性,外部可访问
protected $email; // 受保护属性,仅类和子类可访问
private $password; // 私有属性,仅类内部可访问
}
类的方法
方法是类的成员函数,用于定义行为。方法也可以设置访问修饰符:
class Calculator {
public function add($a, $b) {
return $a + $b;
}
private function log($message) {
// 私有方法,仅内部调用
}
}
构造函数和析构函数
-
__construct是构造函数,在创建对象时自动调用:class Person { public function __construct($name) { $this->name = $name; } } -
__destruct是析构函数,在对象销毁时调用:class Logger { public function __destruct() { echo "对象已销毁"; } }
实例化对象
使用 new 关键字创建类的实例:
$user = new User();
$calculator = new Calculator();
继承
PHP 支持单继承,通过 extends 实现:
class Admin extends User {
public function manage() {
echo "管理权限";
}
}
静态属性和方法
静态成员属于类而非实例,通过 static 关键字定义:
class Math {
public static $pi = 3.14;
public static function square($n) {
return $n * $n;
}
}
// 调用静态成员
echo Math::$pi;
echo Math::square(5);
访问控制
public:任何地方可访问。protected:类和子类可访问。private:仅类内部可访问。
魔术方法
PHP 提供特殊魔术方法,以双下划线开头:
__get()和__set():访问不可访问属性时触发。__call():调用不可访问方法时触发。
class Magic {
private $data = [];
public function __get($name) {
return $this->data[$name];
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
接口和抽象类
-
接口:定义方法规范,通过
implements实现:interface Logger { public function log($message); } class FileLogger implements Logger { public function log($message) { // 实现接口方法 } } -
抽象类:包含抽象方法的类,通过
abstract定义:abstract class Animal { abstract public function makeSound(); }
命名空间
使用命名空间避免类名冲突:
namespace MyProject;
class MyClass {
// 类定义
}
示例:完整类实现
class Car {
private $model;
private $color;
public function __construct($model, $color) {
$this->model = $model;
$this->color = $color;
}
public function getInfo() {
return "Model: {$this->model}, Color: {$this->color}";
}
public static function honk() {
echo "Beep beep!";
}
}
// 使用
$myCar = new Car("Toyota", "Red");
echo $myCar->getInfo();
Car::honk();






