2017-04-24 94 views
0

畢竟,所以我無法找出與多參數PHP __constructor最佳實踐的解決方案最通用的成類功能PHP類__constructor參數爲NULL一次函數調用發生

我足夠的搜索我試圖在PHP類中定義一個函數。我將通過簡單的函數調用多次使用此函數。功能將具有2個或更多參數。

當我通過傳遞參數進行函數調用時,它只是到達__constructor時的NULL

  1. 爲什麼它是NULL?

此外,請注意函數addFruitCheckBox內嵌套有對象。

  1. 我在做什麼錯了?

  2. 我有時也想通過函數調用而不是$this->addFruitCheckBoxItemName

在SO中有很多具體問題和解決方案。不過,我相信這個通用的問題會幫助我,一切爲通過多張參數爲__constructor函數在PHP類

 

ini_set('display_errors', 1); 

$_GET['SELECTEDTABNAME'] = 'properties'; 

/* all include files that are involved in function call within a function will be declared here */ 

class AddFruitController 
{ 

    protected $addFruitCheckBoxItemName; 
    protected $addFruitCheckBoxLabel; 
    protected $addFruitMenuItemName; 
    protected $addFruitChoiceItemName; 
    protected $addFruitTimeItemName; 
    public $trustedFruits; 
    public $trustedFruitsModel; 
    public $trustedFruitsSpeed; 
    public $addNewFruit; 
    public $additionalTub; 
    public $chooseParent; 
    public $FruitDown; 
    public $FruitSell; 
    public $timeTitle; 
    public $addFruitbutton; 

    public function __construct($addFruitCheckBoxItemName, $addFruitCheckBoxLabel, $addFruitMenuItemName, $addFruitTimeItemName) 
    { 
     global $interpreterMan, $fetchSeedForSapling; 

     // var_dump($this->addFruitCheckBoxLabel); 
     // var_dump($this->addFruitCheckBoxItemName); 

     $this->trustedFruits = $interpreterMan("Trusted Fruits"); 
     $this->trustedFruitsModel = $interpreterMan("Model"); 
     $this->trustedFruitsSpeed = $interpreterMan("Speed"); 
     $this->addNewFruit = $interpreterMan("New Fruit"); 
     $this->additionalTub = $interpreterMan("Additional Options"); 
     $this->chooseParent = $interpreterMan("Choose Parent"); 
     $this->FruitDown = $interpreterMan("Download Schedule"); 
     $this->FruitSell = $interpreterMan("Install Schedule"); 
     $this->timeTitle = $interpreterMan("Time"); 
     $this->addFruitbutton = $interpreterMan("Add Fruit(s)"); 

     $this->addFruitCheckBoxItemName = $addFruitCheckBoxItemName; 
     $this->addFruitCheckBoxLabel = $addFruitCheckBoxLabel; 
     $this->addFruitMenuItemName = $addFruitMenuItemName; 
     $this->addFruitChoiceItemName = $addFruitChoiceItemName; 
     var_dump($addFruitChoiceItemName); 
     $this->addFruitTimeItemName = $addFruitTimeItemName; 

    } 

    public function addFruitMenu() 
    { 
     global $interpreterMan; 

     $theWidfetch = new FruitMenu(); 
     $theWidfetch->AssignAddJsCode(false); 
     $theWidfetch->AssignChoiceOrder(array($interpreterMan("English"))); 
     $theWidfetch->AssignChoiceText(array($interpreterMan("English") => $interpreterMan("English"))); 
     $theWidfetch->AssignGroupHeader($this->addFruitMenuItemName); 
     $theWidfetch->AssignItemName($this->addFruitMenuItemName); 
     $theWidfetch->AssignSaveLocation($this->addFruitMenuItemName); 
     $theWidfetch->AssignValueToUse("ipad"); 
     $theWidfetch->WaterPath(true, true); 
    } 

    public function addFruitChoiceTable() 
    { 
     global $fetchSeedForSapling, $interpreterMan; 
     $weekChoiceSelection = new FruitChoiceTable(); 
     $weekChoiceSelection->AssignAddJsCode(false); 
     $weekChoiceSelection->AssignChoiceOrder(
      array("sun", "mon", "tue", "wed", "thu", "fri", "sat")); 
     $weekChoiceSelection->AssignChoiceText(array(
      "sun" => $interpreterMan("SUN"), 
      "mon" => $interpreterMan("MON"), 
      "tue" => $interpreterMan("TUE"), 
      "wed" => $interpreterMan("WED"), 
      "thu" => $interpreterMan("THU"), 
      "fri" => $interpreterMan("FRI"), 
      "sat" => $interpreterMan("SAT"), 
     )); 
     var_dump($weekChoiceSelection->AssignGroupHeader($this->addFruitChoiceItemName)); 
     $weekChoiceSelection->AssignItemName("Weekday"); 
     $weekChoiceSelection->AssignNumColumns(7); 
     $weekChoiceSelection->AssignValueToUse($fetchSeedForSapling("dayOfWeek")); 
     $weekChoiceSelection->WaterPath(true, true); 
    } 

    public function addFruitTime() 
    { 
     global $fetchSeedForSapling; 
     $FruitTimeSelect = new FruitTime(); 
     $FruitTimeSelect->AssignGroupHeader($addFruitTimeItemName); 
     $FruitTimeSelect->AssignItemName($addFruitTimeItemName); 
     $FruitTimeSelect->AssignValueToUse($fetchSeedForSapling("minuteOfDay")); 
     $FruitTimeSelect->WaterPath(true, true); 
    } 

    public function addFruitCheckBox() 
    { 
     global $fetchSeedForSapling; 
     $addFruitCheckBoxObj = new FruitCheckbox(); 
     $addFruitCheckBoxObj->AssignAddJsCode(false); 
     $addFruitCheckBoxObj->AssignCheckboxLabel($this->addFruitCheckBoxLabel); 
     $addFruitCheckBoxObj->AssignItemName($this->addFruitCheckBoxItemName); 
     $addFruitCheckBoxObj->AssignSaveLocation("somejob"); 
     $addFruitCheckBoxObj->AssignValueToUse($fetchSeedForSapling("somejob")); 
     $addFruitCheckBoxObj->WaterPath(true, true); 
    } 
} 
+0

這還沒有有效的PHP。 –

+0

我可以在同一個SO中向你展示參考資料,他們已經遵循了這個方法,並且也得到了提升。用於將參數傳遞到類名稱中。 @JonStirling –

+0

您可以根據需要將多個參數傳遞給構造函數,但是如果構造函數沒有對它們做任何事情,則不會有什麼神奇的發生 –

回答

1

您可以將多個參數傳遞給constructor方式我正在寫我的文章。但是如果讓我們說你有10 parameters傳遞給constructor所以可能你不想寫它像public function __construct($a,$b,$c,$d,$e....)這本身不是一個好方法。

Try this code snippet here

<?php 

ini_set('display_errors', 1); 
class MyClass 
{ 
    protected $a=0; 
    protected $b=0; 
    protected $c=0; 
    protected $d=0; 
    protected $e=0; 

    public function __construct(array $options=array()) 
    { 
     foreach($options as $key => $value) 
     { 
      $this->{$key}=$value; 
     } 
     print_r($this); 
    } 
} 

$object = new MyClass(array(
    'a'=>1, 
    'b'=>2, 
    'c'=>3, 
    'd'=>4, 
    'e'=>5, 
)); 
+0

'$ addFruitPage = new AddFruitController $ addFruitPage-> addFruitCheckBox(「cbox1」)$ addFruitPage-> addFruitTextBox(「hobbit」)$ addFruitPage-> addFruitTextArea(「pineapple」)'< - **這是合法的和良好的做法嗎? **'global $ translateFruitName,$ getFruitConfigAttribute;的var_dump($這個 - > addFruitCheckBoxItemName); var_dump(addFruitCheckBoxLabel);'如果我打印這個,它顯示NULL,爲什麼? –

+0

@CommonMan是因爲在構造函數中你發送了一些參數,但是你沒有在構造函數中接收它們,其次'addFruitTextArea'沒有返回任何東西。而你使用它的方式完全沒問題。 –

+0

但我在'__contructor'參數的類對象的隱藏處獲得通知。 '失去了AddFruitController :: __ construct()的參數1,就像明智的5通知一樣調用了缺少參數5的通知。 –

2

http://php.net/manual/en/language.oop5.decon.php

class MyClass { 
    protected $a1; 
    protected $a2; 
    protected $a3; 

    public function __construct($a1, $a2, $a3) { 
     $this->a1 = $a1; 
     $this->a2 = $a2; 
     $this->a3 = $a3; 
    } 
} 
+0

,但您將在'__constructor'類中傳遞多少個參數。如果我有30個參數,你希望我能像那樣通過?另外我會在'class'裏面有多個函數。我可能不會同時使用所有功能。所以它會是一個'NULL'參數,可能會發出通知。你讓我這麼做? –

+1

如果你想傳遞大量的參數,那麼'get_func_args()'或者splat運算符('...')可能是有用的 –

+0

或者assoc關聯數組! – rlanvin