Constructor
I wouldn't extract the POST values inside the constructor. For the calculator class, it shouldn't matter where the values come from (it could be POST, GET, the database, anywhere really).
I would just pass the arguments as variables like this:
public function __construct($number1, $number2, $prefix) {
$this->number1 = $number1;
$this->number2 = $number2;
$this->prefix = $prefix;
}
Your constructor also defined $number1
etc without using it. If you want to stay with your approach, the assignments should look like this: $this->number1 = $_POST['number1'];
Input Checking
Right now, you just accept anything the user passes. For example:
prefix=*&number2=0xf&number1=0xd
-> 195
prefix=-&number2=5
-> -5
prefix=*
-> 0
prefix=/
-> error (because of the division by 0)
If this is your intention, then that is fine, but otherwise you should check if all values are set and if they are all decimal numbers. At the least I would check for division by 0.
Misc
- I would call
prefix
command
oroperation
. - it is customary to use CamelCase for class names, so 'calcdata' could be 'CalcData' (or something a bit more concrete like
BasicCalculator
). - your indentation is off. Any IDE can fix this, and it makes your code more readable.
- you have unnecessary newlines (which makes your code a bit harder to read).
is it wise to use the
switch
statement in a function?
In this case it's fine, but if you plan to create a more complex calculator class, I would just create public add
, divide
, negate
(just one argument), log
(three arguments), etc. methods, because a calculator should only have to calculate, it shouldn't actually be the calculators job to decide what it calculates. And it would be hard to manage once you have functions with more or less than two arguments.
So in that case I would extract the switch statement to a separate controller class which then decides what to calculate based on the user input.