Класс векторных вычислений или переполнение стека

Я изучаю php oop и мне кажется, что я до сих пор не понимаю, как некоторые вещи работают как мой код, который, imo, выглядит должным образом, не работает и возвращает несколько ошибок. Это код:

<?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);

Я получаю следующие ошибки: неопределенные переменные «x» и «y» в строке 42 (это $ wekt = new Vector ($ x, $ y);) и «вызов неопределенного метода Vector :: set ()».

Спецификация для этого класса:

  • два приватных атрибута $ x и $ y (вроде бы нормально)

  • Конструктор получает $ x и $ y и при получении проверяет, являются ли они числами. Конструктор должен выдавать сообщение о только что созданном векторе.

Я не очень разбираюсь во всем этом конструкторе, и, вероятно, это одна из причин, почему этот код не работает так, как задумано.

  • деструктор должен выводить информацию об уничтоженном объекте.

  • должны быть доступны функции для изменения значений $ x и $ y

  • должна быть доступна функция для возврата $ x

  • еще две функции: одна выводящая сумма двух векторов, вторая функция, предназначенная для вывода скалярного произведения, которое принимает в качестве значения число.

1

Решение

В вашем коде две вещи не работают. Смотрите следующий код:

class Vector {}

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

Где $x а также $y определены? Это главная причина, по которой вы получаете ошибку. Ваш класс имеет другую область видимости, чем глобальную область, то есть все, что вы определяете, доступно только $wekt-> как $wekt определяется в глобальной области видимости.

Теперь второе addVector():

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

Вы просите повторить возврат этого метода, но в этой функции возврат не определен. Во-вторых, где находится $x а также $y определены в рамках этой функции?

Измените это на что-то вроде:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]