webForumDet fria alternativet

Strul med klasser och åtkomst???

2 svar · 228 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Hej!

Jag har en array som lätt kan innehålla samma värden. När jag räknar ut max, är jag därför också intresserad av att hålla rätt på hur många index som har detta maxvärde. Därför skapar jag en klass Maximus som håller rätt på tre saker: max, antal som har detta maxvärde samt första index för maxvärdet. Sedan skriver jag ut infon på två sätt. Inifrån klassen och allt är frid och fröjd. Utifrån och ingenting funkar! :(

<?php
$arr = array (2, 3, 3, 2, 5, 4, 5, 5, 2, 5);

  class Maximus {

      var $max = 0;
      var $no = 0;
      var $firstIx = "";

      function Maximus($m, $n, $f) {
         global $max, $no, $firstIx; //*****
         $max = $m;
         $no = $n;
         $firstIx = $f;
      }

      function printMax() {
         global $max, $no, $firstIx;  //*****
         echo "The max value is " . $max . ", the quantity is ";
         echo $no . " and the firstIndex is " . $firstIx . "<BR>"; 
        //Ovanstående skapar utskriftens första rad.
      }

   }

   function findMax($vect) {

      $max = -1;
      $no = 0;
      $ix = "";
      foreach ($vect as $key => $value) {
         if ($value > $max) {
            $max = $value;
            $no = 1;
            $ix = $key;
         }
         elseif ($value == $max) {
            $no++;
         }
      }
      $maxInfo = new Maximus($max, $no, $ix);
      $maxInfo->printMax();
      return $maxInfo;
   }

   function printV($vect) {
      foreach ($vect as $key => $value) {
         echo "$key : $value    ";
      }
      echo "<BR>";
   }

   function f() {
      global $arr;
      $match = findMax($arr);
      echo "FirstIndex borde bli 4, men blir " . $match->firstIx . "?<BR>"; 
     //Ovanstående skapar utskriftens andra rad.
   }

//main
f();

Detta ger utskriften:
The max value is 5, the quantity is 4 and the firstIndex is 4
FirstIndex borde bli 4, men blir ?

  1. Kan man inte komma åt variablerna i en class direkt? Är de "private" på något vis?
  2. Eller är det fel på mina return-statements så att $match aldrig får något värde?
  3. Är det verkligen så att raderna som är märkta med //***** är nödvändiga??? Inom en klass??

Tacksam för svar...

nkrantzMedlem sedan apr. 2002830 inlägg
#2
  1. Variablerna i en klass är private, du kan komma åt dem genom att skapa en funktion i klassen som returnerar variabeln.

  2. Tror inte det...

  3. I funktionen Maximus så tilldelar du värden åt dina privata variabler genom att $this->max = $m; Om du kallar på en privat variabel inom klassen, eller en funktion, använd $this->variabel; eller $this->funktionsnamn();

Hoppas det går bättre...

aasahMedlem sedan mars 20034 471 inlägg
#3

Tusen tack! :D

129 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)