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的建構子是在是有點不懂。解釋下必須要給參數賦默認值嗎?
天蓬老师2017-05-16 12:04:46
與建構子無關。
只要函數的參數沒有給預設值,你使用的時候就必須傳參數。
要說比js麻煩,這種說法是不太對的,在js中(ES6之前),給函數設定預設值就比php要麻煩;這又怎麼說呢?
另外,你說到的第三種,參數傳一個對象,或者是數組,這種做法是可以的;當然賦值的時候可以用循環而不必一個一個寫。
大家讲道理2017-05-16 12:04:46
這跟建構子無關
你在定義函數的時候不傳參就報錯
function a($name,$age = 1)
{
}
$name
必傳,$age
不用。 $name
必传,$age
不用。
至于为什么,PHP语法规定
至於為什麼,PHP語法規定
PHP語法不報錯,你運行一下試試,PHP報錯的話,把錯誤訊息貼出來
某草草2017-05-16 12:04:46
PHP函數如果明確指定,參數沒有給預設值,呼叫的時候都必須傳參數。如果有預設值,在呼叫的時候可不給傳參,讀取預設值。
如果你感顯式傳參麻煩,可以使用func_get_args()函式讀取參數。
PHP5.6以後也可以使用 function A(...$args)形式讀取參數。
巴扎黑2017-05-16 12:04:46
建構函式就是你new 一個物件的時候 預設呼叫的函式
函數的參數 如果沒有預設值 必傳 這是語法規定
所有的函數都是這樣 再多參數你也要一個個傳
我所知道的所有的語言 都是這麼規定的