如何在php构造函数中提及关键字参数?

时间:2014-03-02 04:23:05

标签: php

我是PHP OOP的新手。

我有这个构造函数

protected $path='default';  

function __construct($var1, $var2 ..){
        $this->var1=$var1;
        $this->var2=$var2;
    }

$obj = MyClass($var1='www')

我希望如果我创建对象并且不传递任何参数,那么我得到具有空值的对象。

但是如果像上面那样提到构造函数中的属性那么对象应该设置这些属性。

目前,如果我用args定义构造函数并且不提供任何,那么我得到错误

2 个答案:

答案 0 :(得分:2)

您可以在PHP中使用func_get_args()

<?php
class foo
{

    private $arrParams;

    function __construct()
    {
        if (func_num_args() != 0) {
            $this->arrParams = $this->setValues(func_get_args());

        }
    }

    public function setValues($params)
    {
        return $params;
    }

    public function dispParams()
    {
        print_r($this->arrParams);
    }

    public function retVal($var)
    {
        return $this->arrParams[$var];
    }

}

$foo1 = new Foo(3, 45, 64, 34);
$foo1->dispParams();

<强> OUTPUT :

Array
(
    [0] => 3
    [1] => 45
    [2] => 64
    [3] => 34
)

要从数组中获取相应的值...您只需调用

即可
 $foo1->retVal(2); // Prints you 64

答案 1 :(得分:0)

你需要像这样声明类属性:

class  yourClass{

protected $path='default';  
public $var1;
public $var2;
function __construct($var1="dd", $var2='ss'){
        $this->var1=$var1;
        $this->var2=$var2;
    }

}

$obj = new yourClass();
echo "without params: ".$obj->var1.$obj->var2;

$obj2 = new yourClass("sdf","sfdsdf");
echo " with params : ".$obj2->var1.$obj2->var2;

Demo