php 的class建構子問題
PHP中文网
PHP中文网 2017-05-16 12:02:46
0
6
568
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 一個物件的時候 預設呼叫的函式

函數的參數 如果沒有預設值 必傳 這是語法規定

所有的函數都是這樣 再多參數你也要一個個傳

我所知道的所有的語言 都是這麼規定的

大家讲道理

可以穿一個陣列咩

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板