参数为什么要赋值为空呢?

$username = ''为什么要这样写呢?直接写$username不行吗?我看有时还赋值为数组$username =[]这样做有什么用呢?

 public function __construct($username = '')
    {
        $this->username = $username;
    }
阅读 2.7k
3 个回答

题主问题按我理解可以分为两个问题
1.$username = ''为什么要这样写呢?
这样写的目的在于给$username一个默认值,请看下面的例子

class example {
    public $username;
    public function __construct($username = '') {
        $this->username = $username;
    }
    
    public function get_username() {
        echo $this->username;
    }
}

$test1 = new example('我是参数');
$test1->get_username();
当执行上面两行代码时,页面会打印出 ‘我是参数’ 四个字。也就说我们向构造方法传入了‘我是参数’这个字符串

$test2 = new example();
$test2->get_username();
当执行上面两行代码时,页面输出一个空字符串。这次我们没有传参,所以example类的构造函数默认将$username的值设为了空字符串。

2.不给默认值,直接写$username不行吗?
当然可以,不过需要注意一个问题,就是初始化上例中example类的时候必须传参,不然PHP会报缺少参数的提示。

$test1 = new example('我是参数'); 这行代码中的 ‘我是参数’ 必须传入。
  1. 构造函数里面的$username = ''$username的默认参数,可以使用new User()new User('abc')来给User类的$username属性赋值
  2. 后面的$username = []是一种好的习惯,对$username进行初始化,参见手册PHP基础,初始化变量
<?php
function test($res){
    $ret = [];
    if($res){
        $ret = [1,2,3];
    }
    return $ret;
}

function test2($res){
    if($res){
        $ret = [1,2,3];
    }
    return $ret;
}
var_dump(test(false));
var_dump(test2(false));

当构造函数不传参数时,$username默认传参数为""

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题