一旦函数调用发生,PHP类__Constructor参数为NULL

After all, searching enough in SO I couldn't find out a most generic with best practice solution for PHP __constructor with multiple parameter into a class function

I am trying to define a function inside a PHP class. Where I will be using this function multiple times through a simple function call. Where the function will be having 2 or more parameters.

When I do a function call by passing the parameter, it's just NULL when it reaches the __constructor.

  1. Why it's NULL?

Also, note that there are objects nested inside the function addFruitCheckBox.

  1. What I am doing wrong?

  2. I may also wanted to pass a function call instead of $this->addFruitCheckBoxItemName sometimes.

There are lot of specific problems and solutions in SO. However, I believe this generic question will help me and all, for passing mulitple parameter into __constructor function in a PHP class

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);
    }
}

You can pass multiple parameters to constructor the way i am doing in my post. But if Lets say you have 10 parameters to pass to constructor so might be you dont want to write it like public function __construct($a,$b,$c,$d,$e....) which is not a good approach in itself.

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,
));

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;
    }
}