上一节我们学习了如何访问PHP中对象的属性和方法,本节我们将学习PHP中类的构造函数。

对于PHP中的类来说,构造函数是一个特殊的方法,它的函数名是“__construct”(两个下划线)它的功能是在类创建后自动调用构造函数对其属性进行初始化。

比如我们有一个Dotcpp用户类,属性有的昵称、签名、成绩以及等级,在没有进行初始赋值后,我们可以通过构造函数对其属性进行默认赋值。

<?php 
class Dotcpp_user
{
    // 属性(成员变量)
    public $nickName;
    public $signature;
    public $grade;
    public $degree;
     
    // 构造函数:创建对象时初始化属性
    public function __construct() {
        $this->nickName = 'dotcpp_user';
        $this->signature = 'default';
        $this->grade = '0';
        $this->degree = 'p1';
    }
}
/* 创建一个Dotcpp_user,然后调用其属性 */
$dotcpp_user=new Dotcpp_user();
echo $dotcpp_user->nickName.'<br>';
echo $dotcpp_user->signature.'<br>';
echo $dotcpp_user->grade.'<br>';
echo $dotcpp_user->degree.'<br>';
?>

虽然我们没有为dotcpp_user手动进行属性赋值,但是我们可以通过构造函数进行初始赋值,指定对象的默认属性:

PHP 无参构造函数

在PHP中,构造函数有两种,一种是无参构造,就像上面这个例子,我们没有给__construct函数指定任何参数,而是直接默认赋值;第二种是有参构造,可以通过参数指定创建出的对象的属性。

比如Dotcpp用户有user1,user2,user3···,此时我们就需要用到有参构造了:

<?php 
/* 有参构造函数 */
class Dotcpp_user
{
    // 属性(成员变量)
    public $nickName;
    public $signature;
    public $grade;
    public $degree;
     
    // 构造函数:创建对象时初始化属性
    public function __construct($nickName, $signature, $grade, $degree) {//在这里指定参数(参数1,参数2,···)
       $this->nickName = $nickName;
        $this->signature = $signature;
        $this->grade = $grade;
        $this->degree = $degree;
    }
}
/* 创建一个Dotcpp_user,然后调用其属性 */
$dotcpp_user1=new Dotcpp_user('user1','Do coding!','100','p1');
$dotcpp_user2=new Dotcpp_user('user2','Do coding!','100','p1');
$dotcpp_user3=new Dotcpp_user('user3','Do coding!','100','p1');
$dotcpp_user4=new Dotcpp_user('user4','Do coding!','100','p1');
/* 通过有参构造,每一个创建出来的对象都有不同的初始属性 */
echo $dotcpp_user1->nickName.'<br>';
echo $dotcpp_user2->nickName.'<br>';
echo $dotcpp_user3->nickName.'<br>';
echo $dotcpp_user4->nickName.'<br>';
?>

访问test.php,我们可以看到4个用户有4个不同的昵称,这里我们通过有参构造实现了同一个类的不同初始化。

PHP 有参构造函数

总结:PHP 构造函数有有参构造和无参构造之分,一般情况下我们都是使用有参构造创建不同属性的对象。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)