2016-08-28 2 views
1

Ich lerne PHP-OOP und scheint wie ich immer noch nicht verstehen, wie einige Dinge funktionieren wie mein Code, der, imo, sieht nicht richtig aus und gibt wenige Fehler zurück. Dies ist der Code:Vector Berechnungen Klasse oop PHP

<?php 

class Vector { 

    private $x; 
    private $y; 

    public function __construct($x, $y) { 
     if (is_nan($x) || is_nan($y)) { 
      $this->x = 0 && $this->y = 0; 
     } else { 
      $this->set($x, $y); 
     } 
    } 

    public function __destruct() { 
     var_dump($x, $y); 
    } 

    public function setx($x) { 
     if (is_numeric($x)) { 
      $this->x; 
     } 
    } 

    public function sety($y) { 
     if (is_numeric($y)) { 
      $this->y; 
     } 
    } 
    public function retLength() { 
     return $x; 
    } 
    public function addVector() { 
     $sum=$x+$y; 
    } 
    public function dotProduct() { 
     $dot_product = array_sum(array_map(function($x,$y) { return $x*$y; }, $array1, $array2)); 
    } 
} 

$wekt= new Vector($x, $y); 
echo $wekt->addVector(5,7); 

Fehler i bekommen sind: nicht definierte Variablen "x" und "y" auf der Leitung 42 (die $ wekt = new Vector ($ x, $ y) ist;) und „Call to undefinierte Methode Vector :: set() ".

Spezifikation für diese Klasse ist:

  • zwei private Attribute $ x und $ y (scheint in Ordnung zu sein)

  • Konstruktor erhält x $ y $ und über die Kontrollen erhalten, wenn diese Zahlen. Der Konstruktor soll die Nachricht über den gerade erstellten Vektor ausgeben.

  • Ich verstehe nicht all diesen Konstruktor und wahrscheinlich ist dies einer der Gründe, warum dieser Code nicht so funktioniert, wie es beabsichtigt ist.

  • Destruktor soll Informationen über zerstörtes Objekt ausgeben.

  • sollte dort zur Verfügung stehenden Funktionen werden, um Werte von $ x und $ y

  • es sich ändern verfügbare Funktion $ x

  • zwei weitere Funktionen sein sollte zurückzukehren: eine Ausgabesumme von zwei Vektoren, zweiter Funktion soll Skalarprodukt ausgeben, das als Wert eine Zahl annimmt.

+0

'$ x' und' $ y' nicht in dem Rahmen vor, wenn Sie den Anruf 'neuen Vector tun()' –

+0

Es gibt keine 'set()' Methode in Ihrer 'Vector' Klasse, nur Methoden für' setx() 'und' sety() ' –

+0

http://php.net/variables.scope –

Antwort

1

Es gibt zwei Dinge in Ihrem Code, die falsch laufen. Siehe den folgenden Code:

class Vector {} 

$wekt= new Vector($x, $y); 
echo $wekt->addVector(5,7); 

Wo $x und $y definiert? Dies ist der Hauptgrund, warum Sie den Fehler erhalten. Ihre Klasse hat einen anderen Gültigkeitsbereich als der globale Gültigkeitsbereich, dh alles, was Sie dort definieren, ist nur über $wekt-> zugänglich, da $wekt im globalen Geltungsbereich definiert ist.

Nun ist die zweite Sache ist addVector():

echo $wekt->addVector(5,7); 

Sie bitten, die Rückkehr dieser Methode Echo, noch keine Rückkehr wird in dieser Funktion definiert. Zweitens, wo ist die $x und $y im Rahmen dieser Funktion definiert?

ändert es so etwas wie:

class Vector { 
    private $list = []; 
    public function addVector($x, $y) { 
     $this->list[] = new Vector($x, $y); 
     return $x + $y; 
    } 
} 
+0

Ich hätte fast vergessen, dass ich diesen Thread erstellt habe :-) Bis jetzt habe ich diesen Code repariert und jetzt sieht es viel besser aus als das, was ich hier gemacht habe. Da die Antworten auf Stackoverflow auf Zeichen begrenzt sind, werde ich den Code in diesem Post nicht veröffentlichen.Letztendlich habe ich ein bisschen besseres Verständnis von Konstruktoren und ich kann sie sogar benutzen, was eine gute Sache ist. – spectatorx

+0

@spectatorx Als mindestens markieren Sie es, da es Ihr Problem gelöst hätte. Jetzt habe ich sogar vergessen, dass ich diese Antwort gemacht habe, ich gehe einfach zurück in die Geschichte über alle unmarkierten/unbenoteten. ;) – Xorifelse