2016-05-01 3 views
0

Ich versuche, Konstrukteure und PHP im Allgemeinen zu verstehen, aber was ich hier erreichen möchte, ist eine Möglichkeit, Volumen, Durchmesser und Fläche eines Kreises mit PI und FOUR_THIRDS als Konstanten in der Klasse zu berechnen.PHP: Wie berechnet man das Volumen, den Durchmesser und die Fläche eines Kreises?

Mein Code sagt immer, es gibt einen Fehler mit den Konstanten sagen, dass sie nicht definiert sind, aber ich kopierte die Methode von php.net. Dann die $radius wird auch als undefinierte Variable angezeigt, also sollte ich $radius = 1; irgendwo in die Klasse hinzufügen, um es zu definieren, ist das, was es bedeutet, zu definieren?

<?php 

class SphereCalculator { 

const PI = 3.14; 
const FOUR_THIRDS =4/3; 



    public function __construct($radius){ 
     $this->classRadius = $radius; 
    } 

    public function setRadius ($radius){ 
     $this->classRadius = $radius; 
    } 

    public function getRadius(){ 
     return $this->classRadius; 
    } 


    public function getVolume() { 

     return FOUR_THIRDS * PI * ($this->classRadius * $this->classRadius); 
    } 


    public function getArea() { 

     return PI * ($this->classRadius * $this->classRadius); 
    } 

    public function getDiameter() { 

     return $this->classRadius += $this->classRadius; 
    } 

} 

$mySphere = new SphereCalculator(); 
$newRadius =$mySphere->radius; 
$newRadius = 113; 

echo "The volume of the circle is ".$mySphere->getVolume()."<br>"; 
echo "The diameter of the circle is ".$mySphere->getDiameter()."<br>"; 
echo "The area of the circle is ".$mySphere->getArea()."<br>"; 



?> 
+1

Klasse Konstanten referenziert werden als 'self :: FOUR_THIRDS' (innerhalb der Klasse) oder' SphereCalculator :: FOUR_THIRDS' (von außerhalb der Klasse); globale Konstanten werden als 'FOUR_THIRDS' bezeichnet .... Sie haben Klassenkonstanten definiert –

+0

Für Durchmesser; Verwenden Sie nicht '+ =', verwenden Sie einfach '+', sonst verdoppeln Sie den Wert der Eigenschaft 'classRadius' bei jedem Aufruf von' getDiameter() ' –

+0

Außerdem fehlt Ihnen ein' * $ this-> classRadius' - Volume ist 4/3 PI R^3 –

Antwort

1

Sie müssen die Konstante FOUR_THIRDS als Gleitkommawert oder Ganzzahl definieren. Sie haben mit 4/3 definiert, was nicht akzeptabel ist.

Daher müssen Sie, wie definieren,

const PI = 3.14; 
const FOUR_THIRDS = 1.33; 

Da Sie die Konstanten in der Klasse definiert haben, dauert es als Membervariable der Klasse selbst. Daher müssen Sie auf die Konstanten mit self::PI zugreifen.

Andere Problem mit Ihrem PHP-Code ist die Definition des Konstruktors falsch. Sie haben beim Definieren des Konstruktors einen Parameter, aber in Ihrem Hauptteil des Codes, in dem Sie das Objekt erstellt haben, haben Sie den Parameter nicht übergeben. Hier

ist der Link zu dem korrigierten PHP-Code: https://ideone.com/UOMUPf

+0

Brilliant! Es hat funktioniert, vielen Dank! –

+0

Markierte diese Antwort als Antwort und upvote. Wäre hilfreich für mich auch. :) – ashish

+0

Ich kann nicht upvote seit ich ' Ich bin nur neu (ich brauche eine Wiederholung von 15), aber ich habe ihm einen großen grünen Tick von mir gegeben! Danke nochmal! –

0

sollten Sie Konstanten Namen wie ClassName::ConstantName, mit Klasse verwenden, und wenn Sie innerhalb der Klasse verwenden, dann können Sie als self::ConstantName verwenden.

Also sollten Sie Ihre Konstanten wie self::PI und self::FOUR_THIRDS verwenden.

Verwandte Themen