首頁  >  問答  >  主體

php 的class建構子問題

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中文网2734 天前563

全部回覆(6)我來回復

  • 天蓬老师

    天蓬老师2017-05-16 12:04:46

    與建構子無關。
    只要函數的參數沒有給預設值,你使用的時候就必須傳參數。

    要說比js麻煩,這種說法是不太對的,在js中(ES6之前),給函數設定預設值就比php要麻煩;這又怎麼說呢?

    另外,你說到的第三種,參數傳一個對象,或者是數組,這種做法是可以的;當然賦值的時候可以用循環而不必一個一個寫。

    回覆
    0
  • 黄舟

    黄舟2017-05-16 12:04:46

    1.可以不給預設值,你這裡報錯應該是因為你的第一個參數給了預設值,有預設值的參數應該都放在後方,語法規定.(詳細參看文件)
    2.傳入對象當然也是可以的

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:46

    這跟建構子無關
    你在定義函數的時候不傳參就報錯

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

    $name必傳,$age不用。 $name必传,$age不用。
    至于为什么,PHP语法规定至於為什麼,PHP語法規定


    PHP語法不報錯,你運行一下試試,PHP報錯的話,把錯誤訊息貼出來

    回覆
    0
  • 某草草

    某草草2017-05-16 12:04:46

    PHP函數如果明確指定,參數沒有給預設值,呼叫的時候都必須傳參數。如果有預設值,在呼叫的時候可不給傳參,讀取預設值。

    如果你感顯式傳參麻煩,可以使用func_get_args()函式讀取參數。

    PHP5.6以後也可以使用 function A(...$args)形式讀取參數。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 12:04:46

    建構函式就是你new 一個物件的時候 預設呼叫的函式

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

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

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 12:04:46

    可以穿一個陣列咩

    回覆
    0
  • 取消回覆