2016-04-26 9 views
0

私は、給与と給与を持つ人数を決定するクラスを使用しようとしています.OOPは私には新しく、多くのチュートリアルや例を見てきました。PHP OOP調整するプロパティを指定するベストプラクティス

class quickCalc 
{ 
    private $salary = 0; 
    private $person = 0; 
    private $person_salary = 0; 

    private animal = 0; 
    private animal_salary = 0; 

    public function addCost($type, $salary) 
    { 
     $this->$type++; 

     $type_two = $type.'_salary'; 

     $this->$type_two += $salary; 
    } 

    public function getCount($type) 
    { 
     return $this->$type; 
    } 

    public function getCost($type) 
    { 
     $type = $type.'_salary'; 
     return $this->$type; 
    } 

} 

$test = new quickCalc(); 
$test->addCost('person', 15000); 

echo $test->getCount('person'); //1 
echo $test->getCost('person'); //10000 
echo $test->getCount('animal'); //0 

私は1人、または動物など、関連するプロパティの増加を追加して、見て、給与の値があることができるように:私は、次のベストプラクティスを使用していた場合、私はわかりません既存の値に加えられました

私がわからないことは、図のようにオブジェクトを介してプロパティ名を渡すことがベストプラクティスの場合です:

public function addCost($type, $salary) 
{ 
    $this->$type++; 
} 

または各プロパティは、このような、独自の機能を持つべきである:

public function addPerson($salary) 
{ 
    $this->person++; 
    $this->person_salary++; 
} 
+3

この質問は、あなたが代わりにまだ常に同じ方法を_call_が、 'スイッチを使用することができhttp://codereview.stackexchange.com – JimL

+0

に適しように見えます'ステートメントを実行し、次にそのタイプに関連するメソッドを実行します。 – Brett

答えて

0

各プロパティは、独自の機能を有していなければなりません。このような "動的な"特性を持つことは奇妙に感じます。

ただし、property overloadがPHPでどのように動作するか確認できます。例は面白いです。

私にはあなたの仕事は配列(またはIterators)を含むべきだと私は思っています。給与を加算し、既存の方法で平均などを数えるか計算することができます。

0

別の解決方法は、個別のタイプと対応する給与値を格納するために配列を使用することです。ここでは例です:

class quickCalc{ 

    private $type = array('person' => 0, 'animal' => 0); 
    private $salary = array('person' => 0, 'animal' => 0); 

    public function addCost($type, $salary){ 
     $this->type[$type]++; 
     $this->salary[$type] += $salary; 
    } 

    public function getCount($type){ 
     return $this->type[$type]; 
    } 

    public function getCost($type){ 
     return $this->salary[$type]; 
    } 
} 

$test = new quickCalc(); 
$test->addCost('person', 15000); 
echo $test->getCount('person') . "<br />"; // 1 
echo $test->getCost('person') . "<br />"; // 15000 

$test->addCost('animal', 20000); 
$test->addCost('animal', 20000); 
echo $test->getCount('animal') . "<br />"; // 2 
echo $test->getCost('animal') . "<br />"; // 40000 

出力:

1 
15000 
2 
40000 
関連する問題