0

このコードに約 4 時間費やしましたが、コード スニペットが正常に実行されている間に必要な結果が得られませんでした。コードは次のとおりです。

trait CircleShape{
    public function input($radius){
        $this->$radius = $radius;
    }
}

trait AngleShape{
    public function input($height, $width){
        $this->$height = $height;
        $this->$width = $height;
    }
}

trait GeneralMethod{
    public function get($property){
        return $this->$property;
    }
}

class Shape{
    private $height, $width, $radius;
    const PI = 3.1415;

    use GeneralMethod, AngleShape, CircleShape{
        AngleShape::input insteadof CircleShape;
        CircleShape::input as inputCircle;
    }
}

class Circle extends Shape{
    public function area(){
        return parent::PI * $this->get('radius') * $this->get('radius'); 
    }       
}

class Rectangle extends Shape{

    use GeneralMethod, AngleShape, CircleShape{
        AngleShape::input insteadof CircleShape;
        CircleShape::input as inputCircle;
    }
    public function area(){
        return $this->get('height') * $this->get('width'); 
    }       
}

$rect = new Rectangle;
$rect->input(12, 2);
Echo "Area: " . $rect->area() . "\n";

$cir = new Circle;
$cir->inputCircle(10);
Echo "Circle Area : " . $cir->area() . "\n";

このコードの論理エラーは何ですか? 次の出力が得られる理由:

Rectangle Area : 0
Circle Area : 0
4

2 に答える 2

4
$this->$radius = $radius;

する必要があります

$this->radius = $radius;

$heightとと同じ$widthです。

于 2012-05-22T14:35:24.833 に答える
0

ここでは、疑似変数 $this と矢印演算子 (->) を使用して 1 つの変数を呼び出しようとしている場合、変数の前に $ をドロップする必要があります

于 2013-10-21T05:14:13.897 に答える