php 的class构造函数问题
PHP中文网
PHP中文网 2017-05-16 12:02:46
0
6
569
class upload{
   protected $name;
    protected $sex;

 public function __construct($name='默认值',$sex='默认值'){
     $this->name=$name;
     $this->sex=$sex;
  }
}

为什么不能这样写?

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

还有我可以这样写吗?如果上面的参数过多,要写何年马月?

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

为什么必须给构造函数加默认值,否则会报错!!!写惯了js,php的构造函数是在是有点不明白。解释下必须要给参数赋默认值吗?


PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
Peter_Zhu

与构造函数无关。
只要函数的参数没有给默认值,你使用的时候都必须传参数。

要说比js麻烦,这种说法是不太对的,在js中(ES6之前),给函数设置默认值就比php要麻烦;这又怎么说呢?

另外,你说到的第三种,参数传一个对象,或者是数组,这种做法是可以的;当然赋值的时候可以用循环而不必一个一个写。

黄舟

1.可以不给默认值,你这里报错应该是因为你的第一个参数给了默认值,有默认值的参数应该都放在后方,语法规定.(详细参看文档)
2.传入对象当然也是可以的

大家讲道理

这跟构造函数无关
你在定义函数的时候不传参就报错

function a($name,$age = 1)
{
}

$name必传,$age不用。$name必传,$age不用。
至于为什么,PHP语法规定至于为什么,PHP语法规定


PHP语法不报错,你运行一下试试,PHP报错的话,把错误信息贴出来

某草草

PHP函数如果显式指定,参数没有给默认值,调用的时候都必须传参数。如果有默认值,在调用的时候可不给传参,读取默认值。

如果你感显式传参麻烦,可以使用func_get_args()函数读取参数。

PHP5.6以后也可以使用 function A(...$args)形式读取参数。

巴扎黑

构造函数就是你new 一个对象的时候 默认调用的函数

函数的参数 如果没有默认值 必传 这是语法规定

所有的函数都是这样 再多参数你也要一个个传

我所知道的所有的语言 都是这么规定的

大家讲道理

可以穿一个数组咩

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板