0

0

PHP 类设计:通过公共方法初始化私有属性并实现继承

DDD

DDD

发布时间:2025-09-27 11:28:12

|

838人浏览过

|

来源于php中文网

原创

PHP 类设计:通过公共方法初始化私有属性并实现继承

本教程探讨在PHP中如何不依赖__constructor显式初始化类中的私有属性,尤其是在处理继承场景时。我们将通过定义公共方法来设置父类的私有属性,并展示子类如何通过调用父类方法来访问这些属性,从而实现灵活且可控的对象初始化流程。

PHP中的属性初始化与__constructor

php中,__constructor是一个特殊的方法,用于对象创建时执行初始化操作。当您使用new classname(...)实例化一个对象并传入参数时,php会尝试调用该类的__constructor方法来处理这些参数。如果一个类没有定义__constructor方法,php会提供一个默认的空构造函数。然而,如果您尝试在没有定义__constructor的情况下,像new strawberry("strawberry", "red");这样向构造函数传递参数,php会抛出错误,因为它不知道如何处理这些参数。

私有属性(private)是类内部的封装机制,只能在该类内部访问。为了在对象外部设置这些私有属性,通常需要通过公共方法(public)进行操作,或者在构造函数中初始化。

通过公共方法初始化私有属性

在不使用__constructor的情况下,我们可以定义一个公共方法来专门负责设置类的私有属性。这种方法提供了更大的灵活性,允许我们在对象创建之后、需要时才进行属性初始化。

考虑以下Fruit类的例子,它拥有$name和$color两个私有属性:

name = $name;
    $this->color = $color;
  }

  /**
   * 打印水果的介绍。
   */
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
?>

在这个Fruit类中,我们定义了一个公共方法describe(),它接受$name和$color作为参数,并用它们来设置类的私有属性。intro()方法则负责访问这些私有属性并输出信息。

立即学习PHP免费学习笔记(深入)”;

继承与私有属性的间接访问

当一个子类继承父类时,它会继承父类的所有公共(public)和受保护(protected)方法。虽然子类不能直接访问父类的私有属性,但它可以调用父类的公共方法,而这些公共方法可以在父类内部访问其私有属性。

神采PromeAI
神采PromeAI

将涂鸦和照片转化为插画,将线稿转化为完整的上色稿。

下载

让我们创建一个Strawberry类,它继承自Fruit:

intro();
  }
}
?>

在Strawberry类中,message()方法调用了父类Fruit的intro()方法。由于intro()是Fruit类的一个公共方法,它可以在Fruit类内部访问$name和$color私有属性。因此,即使Strawberry类本身无法直接访问$name和$color,它也能通过调用intro()方法来间接利用这些属性。

完整示例与调用流程

现在,我们可以将这些类结合起来,并展示如何实例化对象、初始化属性以及调用方法:

name = $name;
    $this->color = $color;
  }

  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// 定义子类 Strawberry
class Strawberry extends Fruit {
  public function message() {
    echo $this->intro();
  }
}

// 实例化 Strawberry 对象,不传入构造函数参数
$strawberry = new Strawberry();

// 调用 describe 方法设置私有属性
$strawberry->describe("Strawberry", "red");

// 调用 message 方法(或直接 intro 方法)显示信息
$strawberry->message(); // 输出: The fruit is Strawberry and the color is red.
echo PHP_EOL;

// 优化:直接调用父类的intro方法
$apple = new Strawberry();
$apple->describe("Apple", "green");
$apple->intro(); // 输出: The fruit is Apple and the color is green.
?>

在这个示例中,我们首先实例化Strawberry对象,但没有传递任何参数,因为Strawberry(及其父类Fruit)都没有定义接受这些参数的__constructor。接着,我们调用$strawberry->describe("Strawberry", "red");来设置Fruit类中的私有属性$name和$color。最后,通过调用$strawberry->message();或直接调用$strawberry->intro();来显示结果。

优化与最佳实践

  • 方法命名: 将原问题中的patients()方法重命名为更具描述性的describe(),这符合良好的编程实践,使方法意图更清晰。
  • 冗余方法移除: 如果子类Strawberry的message()方法仅仅是简单地调用父类的intro()方法,那么message()方法本身是多余的。可以直接在对象上调用intro()方法,使代码更简洁。
  • 灵活性: 这种通过公共方法进行初始化的方式,适用于需要延迟初始化或在对象生命周期中多次修改属性的场景。它与构造函数的一次性初始化形成互补。
  • 封装性: 私有属性的封装性得到了维护,外部代码仍然只能通过公共方法与对象进行交互。

总结

在PHP中,即使不使用__constructor,我们也可以通过定义公共方法来初始化类的私有属性。这种方法在处理继承时尤其有用,子类可以通过调用父类的公共方法来间接访问和操作父类的私有属性。这提供了一种灵活且可控的对象初始化机制,同时保持了良好的封装性。在设计类时,应根据实际需求选择最合适的属性初始化策略,无论是通过构造函数还是通过独立的公共方法。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1650

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1093

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

986

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1227

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1438

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号