2016-08-28 3 views
1

Я изучаю php oop и кажется, что я до сих пор не понимаю, как некоторые вещи работают как мой код, который, imo, выглядит правильно, не работает и возвращает несколько ошибок. Это код:Векторный расчет класс 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); 

Ошибки я получаю: неопределенные переменные «х» и «у» на линии 42 (который составляет $ wekt = новый вектор ($ х, $ у);) и «Призыв к undefined метод Vector :: set() ".

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

  • два частных атрибутов $ х и $ у (кажется, нормально)

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

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

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

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

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

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

+0

'$ x' и' $ y' не существует в сферу, где вы делаете вызов 'нового вектора()' –

+0

Существует нет 'set()' в вашем классе 'Vector', только методы для' setx() 'и' sety() ' –

+0

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

ответ

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; 
    } 
} 
+0

Я почти забыл, что создал эту тему :-) Пока я исправил этот код, и теперь он выглядит и работает намного лучше, чем я сделал здесь. Поскольку ответы на ответы на stackoverflow имеют предел знаков, я не буду публиковать код в этом сообщении.В конечном счете, теперь у меня есть немного лучшее понимание конструкторов, и я даже могу использовать их, что хорошо. – spectatorx

+0

@spectatorx Вместо того, чтобы пометить его, поскольку он разрешил бы вашу проблему. Теперь я даже забыл, что сделал этот ответ, я просто возвращаюсь в историю обо всех немаркированных/невостребованных. ;) – Xorifelse