PHP 构造函数属性推广初学者指南

WBOY
发布: 2024-08-25 06:41:42
原创
559 人浏览过

A Beginner’s Guide to Constructor Property Promotion in PHP

PHP 8 引入了一个名为 构造函数属性提升 的奇妙功能。如果您是 PHP 或一般编程新手,这可能听起来有点复杂。但别担心!本博客将通过大量编码示例向您介绍它是什么、为什么有用以及如何使用它。让我们开始吧!

什么是建筑商财产促销?

在 PHP 8 之前,创建具有属性的类并在构造函数中初始化它们需要相当多的重复代码。通过 构造函数属性提升,PHP 8 允许您直接在构造函数参数中声明和初始化类属性,从而简化了此过程。

为什么你应该关心?

构造函数属性提升不仅仅是节省几行代码,而是让您的代码更干净、更易于阅读、更易于维护。这对于初学者来说尤其有价值,他们可能会发现编写构造函数的传统方法有点令人畏惧。

传统方式与建筑商财产推广

让我们首先将编写类和构造函数的传统方式与 PHP 8 中引入的新方式进行比较。

PHP 8 之前(传统方式)

class Car {
    public string $make;
    public string $model;
    public int $year;

    public function __construct(string $make, string $model, int $year) {
        $this->make = $make;
        $this->model = $model;
        $this->year = $year;
    }
}

$car = new Car('Toyota', 'Corolla', 2020);
登录后复制

在此示例中,我们必须声明属性($make、$model 和 $year),然后在构造函数中分配它们。这是很多重复,特别是在处理具有许多属性的类时。

使用 PHP 8(构造函数属性升级)

class Car {
    public function __construct(
        public string $make,
        public string $model,
        public int $year
    ) {}
}

$car = new Car('Toyota', 'Corolla', 2020);
登录后复制

通过构造函数属性提升,您可以在构造函数参数中声明并分配属性。结果是一个更加简洁和可读的类定义。

更多编码示例

为了充分了解构造函数属性提升的威力,让我们探索不同场景中的更多示例。

示例 1:定义图书类

class Book {
    public function __construct(
        public string $title,
        public string $author,
        public int $pages,
        public bool $isAvailable = true
    ) {}
}

$book = new Book('1984', 'George Orwell', 328);
echo $book->title; // Output: 1984
echo $book->isAvailable; // Output: 1 (true)
登录后复制

在这个 Book 类中,isAvailable 属性的默认值为 true。如果在创建类的实例时不指定该参数,则会自动设置为true。

示例 2:创建订单类

class Order {
    public function __construct(
        public int $orderId,
        public string $product,
        public float $price,
        public string $status = 'pending'
    ) {}
}

$order = new Order(123, 'Laptop', 999.99);
echo $order->status; // Output: pending

$order2 = new Order(124, 'Smartphone', 599.99, 'shipped');
echo $order2->status; // Output: shipped

登录后复制

这里,Order 类包含一个默认值为待处理的状态属性。但是,您可以通过在创建订单时提供不同的状态来覆盖此值。

示例 3:构建用户配置文件类

class UserProfile {
    public function __construct(
        public string $username,
        public string $email,
        public int $age,
        private string $password,
        protected string $role = 'user'
    ) {}

    public function getPassword(): string {
        return $this->password;
    }
}

$userProfile = new UserProfile('johndoe', 'john@example.com', 25, 'secret');
echo $userProfile->username; // Output: johndoe
echo $userProfile->getPassword(); // Output: secret
echo $userProfile->role; // Error: Cannot access protected property
登录后复制

在 UserProfile 类中,password 属性是私有的,这意味着不能在类外部直接访问它。相反,您可以使用 getPassword() 方法来检索它。角色属性是受保护的,因此只能在类本身或子类中访问它。

示例 4:具有构造函数属性提升的产品类

class Product {
    public function __construct(
        public string $name,
        public float $price,
        public int $stock = 0
    ) {}
}

$product = new Product('Laptop', 999.99, 10);
echo $product->name; // Output: Laptop
echo $product->stock; // Output: 10

登录后复制

此示例展示了如何使用构造函数属性提升来创建包含 stock 属性默认值的 Product 类。

建筑商财产促销的好处

  1. **更少的样板代码:**您不需要编写重复的代码来声明和初始化属性。

  2. 可读性增强:类定义更加简洁,一目了然。

  3. 减少错误:通过结合属性声明和初始化,可以减少出错的空间。

结论

PHP 8 中的构造函数属性提升是一项强大的功能,可以显着改进您编写类的方式。通过减少样板代码、提高可读性并使代码更易于维护,这是新开发人员和经验丰富的开发人员都会欣赏的功能。

无论您是构建小型项目还是大型应用程序,构造函数属性提升都将帮助您编写更清晰、更高效的 PHP 代码。所以,继续吧,在您的下一个项目中尝试一下,并享受这个出色功能的好处!

以上是PHP 构造函数属性推广初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!