DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» is a community of 967,911 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Naveen Dinushka
Naveen Dinushka

Posted on

Simple Calculator in PHP (OOP principles)

So lets build a calculator which does the following.
1) Addition
2) Multiplication
3) Division
4) Subtraction

The folder and file structure is given below

Alt Text

Lets get the html index.php sorted first, so whats in it?

<?php

 include 'includes/class-autoload.inc.php';
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

<form action="includes/calc.inc.php" method = "post">

    <p>Calculator V01</p>
    <input type= "number" name="num1" placeholder="First number">
    <select name="oper" >
      <option value="add"> Addition </option>
      <option value="sub"> Substraction </option>
      <option value="div">Division </option>
      <option value="mul">Multiplication </option>
    </select>
    <input type="number" name="num2" placeholder="Second number">
    <button type="submit" name="submit">  Calculate</button>

</form>

</body>
</html>

The code above should be self-explanatory, if you are unsure about the class-autoload.php file have a look at this article(
https://dev.to/naveenkolambage/autoload-classes-in-php-4474 ) about it.

And here is the code we have in class-autoload.inc.php

<?php

spl_autoload_register('myAutoLoader');

function myAutoLoader($className){
    $url= $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

    if(strpos($url, 'includes')!==false){
        $path = '../classes/';
    }
    else{
        $path = 'classes/';
    }
    $extension = '.class.php';
    require_once $path.$className.$extension;
}

Then we look at the calculator class file which is calc.class.php

<?php

class Calc{
    public $operator;
    public $num1;
    public $num2;


    public function __construct(string $one, int $two, int $three){
        $this->operator = $one;
        $this->num1 = $two;
        $this->num2 = $three;
    }


    public function calculator(){
     switch ($this->operator) {
         case 'add':
            $result = $this->num1 + $this->num2;
            return $result;             
            break;
        case 'sub':
            $result = $this->num1 - $this->num2;
            return $result;             
            break;
        case 'div':    
             $result = $this->num1 / $this->num2;
             return $result;             
             break;
        case 'mul':    
             $result = $this->num1 * $this->num2;
             return $result;             
             break;

     }
    }

}

Then the next file is calc.inc.php

<?php
include 'class-autoload.inc.php';

$oper = $_POST["oper"];
$num1 = $_POST["num1"];
$num2 = $_POST["num2"];

$calc = new Calc($oper,$num1,$num2);

try {
    echo $calc->calculator();
} catch (TypeError $e) {
    echo "Error!: " .$e->getMessage();
}

?>

When we load this up on xampp we can see the following.

Alt Text

I have created a small video on this https://youtu.be/lU23DLYte6w

Oldest comments (4)

Collapse
 
naveenkolambage profile image
Naveen Dinushka Author

Thanks heaps :)

Collapse
 
macaronigrill profile image
MacaroniGrill

Could you tell me what calc.inc.php does im confused on that part

Collapse
 
macaronigrill profile image
MacaroniGrill

also how does it run, does it go from index.php to calc.inc?
how do the other files interact with those two?

πŸ‘‹ Hey, my name is Noah and I’m the one who set up this ad. My job is to get you to join DEV, so if you fancy doing me a favor, I’d love for you to create an account.

If you found DEV from searching around, here are a couple of our most popular articles on DEV: