PHP 8 中的构造函数属性提升:让类定义更清晰简洁

admin 2024-01-14 655 阅读 0评论

在深入研究 PHP 时,尤其是项目开发时,定义类是基本步骤之一。类充当创建各个对象的蓝图,封装特定于该类的数据和功能。PHP 凭借其强大而不断发展的功能,提供了处理类、构造函数、对象和方法的有效方法。

在 PHP 中定义类:一个基本示例

在 PHP 中,类是用于创建对象的模板。对象是具有特定数据和行为的软件实体。

考虑一个简单的例子:我们想要创建一个名为 Bird 的类。该类将有两个属性:name 和 voice

在传统的 PHP 语法中,类定义如下所示:

class Bird {
    
    private string $name;
    private string $voice;

    function __construct($name$voice) {
        $this->name = $name;
        $this->voice = $voice;
    }
    
    function name() {
        return $this->name;
    }

    function voice() {
        return $this->voice;
    }
}

$bird = new Bird("Duck""Quack");
print_r($bird);

Bird 类定义了两个私有属性:name 和 voice。构造函数 __construct() 初始化这些属性。方法 voice() 返回鸟的声音。

利用 PHP 中的构造函数属性提升

PHP 8.0 引入了一个新功能,称为“构造函数属性提升”。此功能简化了类属性的初始化,在属性仅通过构造函数分配的情况下特别有用。

让我们使用构造函数属性提升来重构 Bird 类:

class Bird {

    private string $name = "鸭子";
    private string $voice = "嘎嘎";

    public function getName(): string {
        return $this->name;
    }

    public function getVoice(): string {
        return $this->voice;
    }
}

$bird = new Bird();
print_r($bird);

通过构造函数属性提升,属性 name 和 voice 会直接在构造函数的参数列表中初始化,从而无需在构造函数体内进行显式属性声明和赋值。

构造函数中的默认值

在 PHP 中,可以为构造函数中的属性指定默认值。默认值是在构造函数被调用时自动分配给属性的值。

以下是一个使用默认值的构造函数的示例:

class Bird {

    private string $name;
    private string $voice = "Beep";

    public function __construct(string $name) {
        $this->name = $name;
    }
}

在这种情况下,属性 voice 的默认值为 "Beep"。因此,如果我们创建一个 Bird 对象而不指定 voice 属性的值,则该属性将自动设置为 "Beep"。

构造函数属性提升的优势

  • 更简洁的代码:减少了冗余代码,使类定义更加简洁易读。

  • 更高效:简化了属性初始化过程,尤其是对于具有多个属性的类。

  • 更强的封装性:在简化初始化的同时,保持了私有属性的封装优势。

在传统的 PHP 中,要初始化类属性,必须在构造函数中显式声明和赋值。这可能会导致代码变得冗长和难以阅读。构造函数属性提升允许开发人员在构造函数的参数列表中直接初始化属性。这使得类定义更加简洁和直接,同时仍然提供类所需的功能和封装。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 655人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表