Я изучаю 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
еще две функции: одна выводящая сумма двух векторов, вторая функция, предназначенная для вывода скалярного произведения, которое принимает в качестве значения число.
В вашем коде две вещи не работают. Смотрите следующий код:
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;
}
}
Других решений пока нет …