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的构造函数是在是有点不明白。解释下必须要给参数赋默认值吗?
与构造函数无关。
只要函数的参数没有给默认值,你使用的时候都必须传参数。
要说比js麻烦,这种说法是不太对的,在js中(ES6之前),给函数设置默认值就比php要麻烦;这又怎么说呢?
另外,你说到的第三种,参数传一个对象,或者是数组,这种做法是可以的;当然赋值的时候可以用循环而不必一个一个写。
1.可以不给默认值,你这里报错应该是因为你的第一个参数给了默认值,有默认值的参数应该都放在后方,语法规定.(详细参看文档)
2.传入对象当然也是可以的
这跟构造函数无关
你在定义函数的时候不传参就报错
$name
必传,$age
不用。$name
必传,$age
不用。至于为什么,
PHP语法规定
至于为什么,PHP语法规定
PHP语法不报错,你运行一下试试,PHP报错的话,把错误信息贴出来
PHP函数如果显式指定,参数没有给默认值,调用的时候都必须传参数。如果有默认值,在调用的时候可不给传参,读取默认值。
如果你感显式传参麻烦,可以使用func_get_args()函数读取参数。
PHP5.6以后也可以使用 function A(...$args)形式读取参数。
构造函数就是你new 一个对象的时候 默认调用的函数
函数的参数 如果没有默认值 必传 这是语法规定
所有的函数都是这样 再多参数你也要一个个传
我所知道的所有的语言 都是这么规定的
可以穿一个数组咩