我是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);
如果你想让你的代码使用类属性,你可以做这样的
构造函数用于加载类属性,然后每个方法不需要自己的参数
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);
$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;
}
...
}
在您的用例中,设置和使用这些私有属性对您没有好处。这是多余的。除非你这样做,否则它们是不相关的。
属性被设置为可以由对象的方法使用或公开可见,并且与发送到方法的参数无关。您对它们进行了类似的命名,但这并没有以任何方式将它们连接起来。