2014-03-02 79 views
3

我是PHP OOP的新用戶。如何在php構造函數中提到關鍵字參數?

我有這樣的構造

protected $path='default'; 

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

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

我想,如果我做對象,不傳遞任何參數,然後我得到的對象空值。

但是,如果在上面的構造函數中提到屬性,那麼對象應該具有這些屬性設置。

目前,如果我定義的構造函數與參數,不提供任何,那麼我得到錯誤 。

+0

什麼樣的類是什麼?它應該做什麼? –

回答

2

你可以利用func_get_args()在PHP

<?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 
+0

提供我有像'$ a,$ b,$ c'在Foo屬性。我希望所有這些都應該起作用。 Foo($ a = '33'),Foo($ b ='dsds'),Foo($ c ='wqwq',$ b = '22')和Foo()'沒有錯誤,並且按照定義的屬性設置在構造函數中 – user3147180

+0

如果你要傳遞10到15個參數,那麼你會變得像'$ a,$ b,$ c,$ d,$ d .....'那樣變得更復雜。這不好。就像我做的一樣,即創建一個私有數組變量,然後使用'func_get_args()' –

+0

映射值,這意味着我必須從構造函數中獲取參數,然後手動將這些參數設置爲對象的屬性。我想如果可能沒有手動設置它。 '$ this - > $ key = $ value;' – user3147180

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

+0

@ user3147180:你試過這個嗎? –

+0

我想所有我想要的是,我傳遞關鍵字參數在構造函數和構造函數應該應該設置該類的屬性 – user3147180

相關問題