基本类定义

class MyClass {
    // 类属性(成员变量)
    public $property1;
    private $property2;
    protected $property3;
    
    // 类常量
    const MY_CONSTANT = 'value';
    
    // 构造函数
    public function __construct($param1, $param2) {
        $this->property1 = $param1;
        $this->property2 = $param2;
    }
    
    // 类方法(成员函数)
    public function myMethod() {
        echo $this->property1;
    }
    
    // 析构函数
    public function __destruct() {
        echo '对象被销毁';
    }
}

访问修饰符

  1. public - 公有的,类内外都可以访问

  2. private - 私有的,只有本类内部可以访问

  3. protected - 受保护的,本类及子类可以访问

实例化类

$obj = new MyClass('value1', 'value2');

访问属性和方法

// 访问属性
echo $obj->property1;

// 调用方法
$obj->myMethod();

// 访问类常量
echo MyClass::MY_CONSTANT;

继承

class ChildClass extends MyClass {
    public function newMethod() {
        // 可以访问父类的protected属性和方法
        echo $this->property3;
    }
    
    // 方法重写
    public function myMethod() {
        // 调用父类方法
        parent::myMethod();
        echo '扩展功能';
    }
}

静态属性和方法

class StaticClass {
    public static $staticProperty = 'value';
    
    public static function staticMethod() {
        echo self::$staticProperty;
    }
}

// 访问静态属性
echo StaticClass::$staticProperty;

// 调用静态方法
StaticClass::staticMethod();

抽象类

abstract class AbstractClass {
    // 抽象方法,子类必须实现
    abstract protected function abstractMethod();
    
    // 普通方法
    public function regularMethod() {
        echo '普通方法';
    }
}

class ConcreteClass extends AbstractClass {
    protected function abstractMethod() {
        echo '实现抽象方法';
    }
}

接口

interface MyInterface {
    public function interfaceMethod();
}

class MyClass implements MyInterface {
    public function interfaceMethod() {
        echo '实现接口方法';
    }
}

特质(Trait)

trait MyTrait {
    public function traitMethod() {
        echo 'Trait方法';
    }
}

class MyClass {
    use MyTrait;
}

$obj = new MyClass();
$obj->traitMethod();

魔术方法

PHP 提供了一系列魔术方法,用于在特定情况下自动调用:

class MagicClass {
    // 当访问不可访问属性时调用
    public function __get($name) {
        echo "获取 $name";
    }
    
    // 当设置不可访问属性时调用
    public function __set($name, $value) {
        echo "设置 $name 为 $value";
    }
    
    // 当调用不可访问方法时调用
    public function __call($name, $arguments) {
        echo "调用方法 $name 参数: " . implode(', ', $arguments);
    }
    
    // 静态方法不存在时调用
    public static function __callStatic($name, $arguments) {
        echo "调用静态方法 $name 参数: " . implode(', ', $arguments);
    }
    
    // 对象被当作字符串使用时调用
    public function __toString() {
        return '对象的字符串表示';
    }
}

匿名类

PHP 7+ 支持匿名类:

$obj = new class {
    public function sayHello() {
        echo "Hello!";
    }
};

$obj->sayHello();

命名空间中的类

namespace MyNamespace;

class MyClass {
    public function sayHello() {
        echo "Hello from MyNamespace!";
    }
}

// 使用
$obj = new \MyNamespace\MyClass();

自动加载类

使用 spl_autoload_register 实现自动加载:

spl_autoload_register(function ($class_name) {
    include $class_name . '.php';
});

// 现在可以自动加载类
$obj = new MyClass();

以上是 PHP 类的基本使用方法。面向对象编程提供了封装、继承和多态等特性,能够更好地组织代码,提高代码的可重用性和可维护性。