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 '对象被销毁';
}
}
public
- 公有的,类内外都可以访问
private
- 私有的,只有本类内部可以访问
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 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 类的基本使用方法。面向对象编程提供了封装、继承和多态等特性,能够更好地组织代码,提高代码的可重用性和可维护性。