创建简单的oop算术函数

时间:2016-04-14 01:46:44

标签: php oop

我是oop的新手。我只是无法调试这个简单的代码。我不知道为什么这些论点不能通过它。

class MyCalculator {  
    private $_fval, $_sval;  

    public function add($fval, $sval) {  
        return $this->_fval + $this->_sval;  
    }  

    public function subtract($fval, $sval) {  
        return $this->_fval - $this->_sval;  
    }  

    public function multiply($fval, $sval) {  
        return $this->_fval * $this->_sval;  
    }  

    public function divide($fval, $sval) {  
        return $this->_fval / $this->_sval;  
    }  
}  

$mycalc = new MyCalculator;   
echo $mycalc-> add(12,6); 
echo $mycalc-> multiply(12,6); 
echo $mycalc-> subtract(12,6);  
echo $mycalc-> divide(12,6); 

2 个答案:

答案 0 :(得分:3)

如果您希望您的代码使用类属性,您可以执行类似这样的操作

构造函数用于加载类属性,然后每个方法都不需要自己的参数

class MyCalculator {  
    private $_fval, $_sval;  

    public function __construct($fval, $sval) {
        $this->_fval = $fval;
        $this->_sval = sval;
    }

    public function add() {  
        return $this->_fval + $this->_sval;  
    }  

    public function subtract() {  
        return $this->_fval - $this->_sval;  
    }  

    public function multiply() {  
        return $this->_fval * $this->_sval;  
    }  

    public function divide() {  
        return $this->_fval / $this->_sval;  
    }  
}  

$mycalc = new MyCalculator(12,6);   
echo $mycalc-> add(); 
echo $mycalc-> multiply(); 
echo $mycalc-> subtract();  
echo $mycalc-> divide(); 

现在纠正你的做法

class MyCalculator {  

    //private $_fval, $_sval;  not used so not needed

    public function add($fval, $sval) {  
        return $fval + $sval;  
    }  

    public function subtract($fval, $sval) {  
        return $fval - $sval;  
    }  

    public function multiply($fval, $sval) {  
        return $fval * $sval;  
    }  

    public function divide($fval, $sval) {  
        return $fval / $sval;  
    }  
}  


$mycalc = new MyCalculator();   
echo $mycalc-> add(12,6); 
echo $mycalc-> multiply(12,6); 
echo $mycalc-> subtract(12,6);  
echo $mycalc-> divide(12,6); 

现在最好将它变成一个静态类,因为它基本上只是一个函数库而且没有实例数据。

class MyCalculator {  

    public static function add($fval, $sval) {  
        return $fval + $sval;  
    }  

    public static function subtract($fval, $sval) {  
        return $fval - $sval;  
    }  

    public static function multiply($fval, $sval) {  
        return $fval * $sval;  
    }  

    public static function divide($fval, $sval) {  
        return $fval / $sval;  
    }  
}  

//$mycalc = new MyCalculator(12,6); static classes dont need to be instantiated
echo MyCalculator::add(12,6); 
echo MyCalculator::multiply(12,6); 
echo MyCalculator::subtract(12,6);  
echo MyCalculator::divide(12,6); 

答案 1 :(得分:2)

$this指的是您的类定义函数的对象。如果您注意到,则在类属性中使用$ _fval,在方法参数中使用$ fval。这些都没有关系。

class MyCalculator
{
     public function add($fval, $sval)
     {
         return $fval + $sval;
     }
...
}

如果您尝试设置和使用对象的属性以便以后可以调用它们,则需要在方法中设置它们的值:

class MyCalculator
{
     private $_fval, $_sval;
     public function add($fval, $sval)
     {
         $this->_fval = $fval;
         $this->_sval = $sval;
         return $this->_fval + $this->_sval;
     }
...
}

在您的用例中,设置和使用这些私有属性没有任何好处。这是多余的。除非你这样做,否则他们没有联系或依赖。

设置属性,以便它们可以由对象的任一方法使用或公开显示,并且与发送到方法的参数无关。你以相同的方式命名它们,但这并没有以任何方式连接它们。