2016-04-26 5 views
0

Ich versuche, eine Klasse zu verwenden, die das Gehalt und die Anzahl der Menschen mit einem Gehalt bestimmen, OOP ist neu für mich, und ich habe viele Tutorials und Beispiele, aber ich bin nicht sicher, ob ich am besten Praktiken in der folgenden bin mit:PHP OOP besten Praktiken der Angabe der Eigenschaft angepasst werden

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 

so wie man sehen kann, wie ich eine Person hinzufügen oder Tier, usw., die damit verbundenen Eigenschaft erhöht sich um 1, und die Gehaltswert zu dem vorhandenen Wert hinzugefügt

Was ich nicht sicher bin, ist, wenn es Best Practice ist, den Namen der Eigenschaft durch das Objekt zu übergeben, wie gezeigt:

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

oder sollte jede Eigenschaft haben, seine eigene Funktion, wie folgt aus:

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

Diese Frage scheint besser geeignet für http://codereview.stackexchange.com – JimL

+0

Sie könnten alternativ noch immer _call_ die gleiche Methode, aber verwenden Sie einen 'Schalter 'Anweisung innerhalb und dann die zugehörige Methode für diesen Typ ausführen. – Brett

Antwort

0

Jede Eigenschaft sollte seine eigene Funktion. Eine solche "dynamische" Eigenschaft zu haben, fühlt sich merkwürdig an.

Sie könnten jedoch überprüfen, wie property overload in PHP funktioniert. Beispiele sind interessant.

Ich muss hinzufügen, dass es für mich aussieht Ihre Aufgabe sollte ein Array (oder Iterators) beinhalten. Sie können Gehälter hinzufügen, dann den Durchschnitt usw. mit vorhandenen Methoden zählen oder berechnen.

0

Eine andere Lösung ist, anstatt separate private Eigenschaften verwenden Arrays zum Speichern von individuellen Typ und entsprechende Gehaltswerte. Hier ein Beispiel:

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 

Ausgang:

1 
15000 
2 
40000 
Verwandte Themen