Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z właściwościami klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
pinefka
Witam.

Mam do napisania program do rozwiązywania problemu komiwojażera. Chciałbym go napisać w sposób obiektowy i jako, że jestem nowy w OOP mam pewnie głupie pytanie:

Jak to jest z właściwościami klasy? Deklarujemy je tylko wtedy gdy będą zwracane przez egzemplarz klasy? Czy również wtedy kiedy będą używane pomiędzy różnymi metodami w obrębie danej klasy? Bardzo bym prosił o wytłumaczenie mi w miarę dokładnie zasad deklarowania właściwości.

Co do samego kodu:
Jeżeli wyświetlę poprzez print_r metodę getStartPopulation() to pokazuje mi się cała tablica, ale jak uzyskać dostęp do konkretnej komórki tej tablicy? Czy tylko poprzez zadeklarowanie zmiennej $startPopulation jako public i odwoływanie się do niej poprzez np. $o->startPopulation[12][4]?

Kod mojej klasy:

Kod
<?php
    
    class Preparation
    {
    
        /**
         * Liczba miast dla ktorej bedzie przeprowadzone szukanie najkrotszej drogi.
         * @var int
         */
        private $citiesNumber;
        
        /**
         * Tablica ze wsporzednymi miast.
         * @var array
         */
        private $citiesCoordinates;
        
        /**
         * Ilosc osobnikow w populacji.
         * @var int
         */
        private $populationNumber;
        
        /**
         * Tablica z populacja poczatkowa.
         * @var array
         */
        private $startPopulation;
        
        
        /**
         * Konstruktor klasy Preparation.
         * @param int $citiesNumber
         * @return void
         */
        public function __construct($citiesNumber)
        {
            $this->citiesNumber = $citiesNumber;
        }
        
        /**
         * Generator wspolrzednych poszczegolnych miast.
         */
        public function generateCities()
        {
            $this->citiesCoordinates = new ArrayObject(array());
            $i = 0;
            
            while ($i < $this->citiesNumber)
            {
                $xCoord = mt_rand(-5000, 5000);
                $yCoord = mt_rand(-5000, 5000);
                
                $this->citiesCoordinates->append(array("x" => $xCoord, "y" => $yCoord));
                $i++;
            }
        }
        
        /**
         * Generator liczby osobnikow.
         */
        public function generatePopulationNumber()
        {
            $this->populationNumber = mt_rand(40,60) - 1;
        }
        
        /**
         * Generator populacji poczatkowej.
         */
        public function generateStartPopulation()
        {
            $this->startPopulation = new ExtendedArrayObject(array());
            $i = 0;
            
            while ($i < $this->populationNumber)
            {
                $random = $this->startPopulation->randomRangeArray($this->citiesNumber - 1);
                $this->startPopulation->append($random);
                $i++;
            }
        }
        
        public function getStartPopulation()
        {
            return $this->startPopulation;
        }
    
    }


Stworzenie egzemplarza:

Kod
<?php
        $citiesNumber = 10;
    
        $o = new Preparation($citiesNumber);
        $o->generateCities();
        $o->generatePopulationNumber();
        $o->generateStartPopulation();
        print_r($o->getStartPopulation());
    ?>


Pozdrawiam.
Noddi
Atrybuty klasy mają opisywać obiekt utworzony za pomocą tej klasy, służą do wymiany danych pomiędzy metodami danej klasy - Programowanie obiektowe. Zaleca się stosować enkapsulację, aby ukryć atrybuty, które ma dana klasa i pozwalać na wykonywanie operacji takich jakich my chcemy.

Możesz stworzyć np. taką metodę.
  1. <?php
  2. public function getStartPopulation($x, $y)
  3. {
  4.    return $this->startPopulation[$x][$y];
  5. }
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.