# PHP-01 面向对象:从会写代码到会组织代码

举报
yd_220371319 发表于 2026/10/05 13:45:54 2026/10/05
【摘要】 前面的入门系列里,我们一直在写函数和过程代码。小项目这样写没问题,但项目一大,代码很容易变成一团。面向对象(OOP)解决的不是“让代码更高级”,而是让代码拥有更清晰的边界。## 1. 类和对象```phpclass User{    public string $name;    public function sayHello(): string    {        return "H...


前面的入门系列里,我们一直在写函数和过程代码。小项目这样写没问题,但项目一大,代码很容易变成一团。

面向对象(OOP)解决的不是“让代码更高级”,而是让代码拥有更清晰的边界。

## 1. 类和对象

```php
class User
{
    public string $name;

    public function sayHello(): string
    {
        return "Hello " . $this->name;
    }
}

$user = new User();
$user->name = "Tom";

echo $user->sayHello();
```

`User` 是类,`$user` 是对象。

## 2. 构造函数

```php
class User
{
    public function __construct(
        public string $name,
        public int $age
    ) {}
}

$user = new User("Tom", 20);
```

## 3. 封装

不是所有属性都应该让外部随便修改:

```php
class User
{
    public function __construct(
        private string $email
    ) {}

    public function getEmail(): string
    {
        return $this->email;
    }
}
```

## 4. 接口

接口可以让业务依赖“能力”,而不是某个具体实现:

```php
interface Cache
{
    public function get(string $key): mixed;
    public function set(string $key, mixed $value): void;
}
```

Redis 缓存、文件缓存都可以实现这个接口。

## 5. Trait

Trait 适合复用一小段横向能力:

```php
trait Loggable
{
    public function log(string $message): void
    {
        echo $message;
    }
}
```

不要把 Trait 当成“什么代码都往里面塞”的工具。

## 6. 实际项目怎么拆?

一个用户模块可能是:

```text
UserController
    ↓
UserService
    ↓
UserRepository
    ↓
Database
```

Controller 处理请求,Service 处理业务,Repository 处理数据访问。

## 7. 不要为了 OOP 而 OOP

一个几十行的小脚本没必要拆成十几个类。

OOP 的目的不是增加文件数量,而是让复杂代码拥有清晰边界。

## 小结

进阶 PHP 的第一步,是学会控制代码之间的关系,而不只是继续背语法。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。