Variable wird zurück gesetzt

  • PHP

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Chris213.

    Variable wird zurück gesetzt

    Hallo Leute,

    ich arbeite das erste mal mit einer Klasse in PHP. Ich habe eine Klasse erstellt, die mir bestimmte Sachen ausgeben soll, die abhängig von 2 Variablen sind.
    Spoiler anzeigen

    PHP-Quellcode

    1. public function getNextOperation(){
    2. if($this->einsatz < (count($this->operation)-1))
    3. $this->einsatz += 1;
    4. $this->getOperation();
    5. }
    6. public function getLastOperation(){
    7. if($this->einsatz > 0)
    8. $this->einsatz -= 1;
    9. $this->getOperation();
    10. }
    11. public function getNextStep(){
    12. if($this->stufe < 3)
    13. $this->stufe += 1;
    14. $this->getOperation();
    15. }
    16. public function getLastStep(){
    17. if($this->stufe > 0)
    18. $this->stufe -= 1;
    19. $this->getOperation();
    20. }
    21. public function getOperation(){
    22. echo "<table>";
    23. if (count($this->operation) > 0){
    24. if($this->stufe == 0){
    25. echo "<tr><td>Einsatz </td><td>".($this->einsatz+1)."/".count($this->operation)."</td></tr>";
    26. echo "<tr><td>Vorname:</td><td>".$this->operation[$this->einsatz]->getFirstname()."</td></tr>";
    27. echo "<tr><td>Nachname:</td><td>".$this->operation[$this->einsatz]->getLastname()."</td></tr>";
    28. echo "<tr><td>Wohnort:</td><td>".$this->operation[$this->einsatz]->getLocation()."</td></tr>";
    29. echo "<tr><td>Straße:</td><td>".$this->operation[$this->einsatz]->getStreet()."</td></tr>";
    30. } else if($this->stufe == 1){
    31. echo "<tr><td>Einsatz </td><td>".($this->einsatz+1)."/".count($this->operation)."</td></tr>";
    32. echo "<tr><td>Stichwort:</td><td>".$this->operation[$this->einsatz]->getKeyword()."</td></tr>";
    33. echo "<tr><td>Einsatznurmmer:</td><td>".$this->operation[$this->einsatz]->getOperationnr()."</td></tr>";
    34. echo "<tr><td>Verletzte:</td><td>".$this->operation[$this->einsatz]->getInjured()."</td></tr>";
    35. }
    36. } else
    37. echo "<tr><td>Einsatz </td><td>".($this->einsatz)."/".count($this->operation)."</td></tr>";
    38. echo "</table>";
    39. echo $this->einsatz.":".$this->stufe;
    40. }


    wenn ich getNectOperation() aufrufe, wird die "einsatz" variable erhöht, wenn ich dann getNextStep aufrufe ist die "einsatz" Variable wieder auf 0 und die "stufe" variable ist um eins erhöht. Kann mir einer erklären wiso das so ist, oder mir sagen was ich übersehen habe.
    Da dies hier if($this->einsatz < (count($this->operation)-1)) das Inkrementieren behindern könnte wäre es wichtig zu wissen was denn so alles in $this->operation drin ist. Vermutlich ist es ein Array. Aber wie ist es aufgebaut und was kommt denn bei count(...) - 1 raus? Debug das mal.
    ich hab auch schon versucht alle auszukommentieren außer das Inkrementieren

    PHP-Quellcode

    1. public function getNextOperation(){
    2. //if($this->einsatz < count($this->operation))
    3. $this->einsatz = $this->einsatz + 1;
    4. echo $this->einsatz." ".rand(1,100); //Zufallszahl zur kontrolle das die Funktion auch aufgerufen wird.
    5. //$this->getOperation();
    6. }


    Und in der Funktion getOperation() gib ich nur den wert von einsatz aus. Dieser erhöht sich wie gesagt einmal und dann bleibt er auf 1 stehen (startwert = 0). Wenn ich dann dekrementiere, bekomme ich -1 ausgegeben. Ich verstehe einfach nicht wiso. Und count() gibt mir den richtigen Wert aus, derzeit 3.
    Was willst du? von 0 bis -1? Wenn du von 0 bis count( array ) - 1 meinst dann sag das auch so.
    Setzt mal an verschiedensten Stellen folgenden Aufruf: printf( "In %s ( %s ) at %i \n", __FILE__, __METHOD__, __LINE__ ); und überprüfe ob das Ganze abläuft wie es sollte.
    Und sei mal ein bisschen kooperativer. "Array is egal". Das Array wird überprüft und anständig genutzt also muss es auch vorliegen zum Testen. Sonst können wir dir auch nicht helfen.
    Also ich habe mal überall wo es wissenswert wäre deinen Aufruf rein gepackt und es scheint so das die Dateien/ Funktionen so aufgerufen werden wie sie sollten.

    Das mit dem Array meint ich so, da ich es alles was damit zu tun hatte auskommentiert wurde und somit das Problem nicht daran liegen kann, oder. Hier nochmal der komplette Code:

    Aufruf der Funktionen befindet sich in einer Datei die über Ajax aufgerufen wird: (load.php)
    Spoiler anzeigen

    PHP-Quellcode

    1. if($click == "left"){
    2. $detector->getLastOperation();
    3. } else if($click == "right"){
    4. $detector->getNextOperation();
    5. } else if($click == "down"){
    6. $detector->getNextStep();
    7. } else if($click == "up"){
    8. $detector->getLastStep();
    9. } else if($click == "load"){
    10. $detector->getOperation();
    11. }


    Definition von der Variable detector:
    Spoiler anzeigen

    PHP-Quellcode

    1. require_once "class/class_detector.php";
    2. require_once "class/class_operation.php";
    3. $GLOBALS["detector"] = new class_detector();


    Eigendliche Klasse:
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. class class_detector{
    3. var $einsatz = 0;
    4. var $stufe = 0;
    5. var $operation = array();
    6. function __construct() {
    7. $this->loadOperation();
    8. }
    9. public function getNextOperation(){
    10. //if($this->einsatz < count($this->operation))
    11. $this->einsatz = $this->einsatz + 1;
    12. echo $this->einsatz." ".rand(1,100);
    13. //$this->getOperation();
    14. }
    15. public function getLastOperation(){
    16. //if($this->einsatz > 0)
    17. $this->einsatz -= 1;
    18. echo $this->einsatz." ".rand(1,100);
    19. //$this->getOperation();
    20. }
    21. public function getNextStep(){
    22. if($this->stufe < 3)
    23. $this->stufe += 1;
    24. $this->getOperation();
    25. }
    26. public function getLastStep(){
    27. if($this->stufe > 0)
    28. $this->stufe -= 1;
    29. $this->getOperation();
    30. }
    31. public function getOperation(){
    32. echo $this->einsatz;
    33. echo count($this->operation);
    34. // echo "<table>";
    35. //
    36. // if (count($this->operation) > 0){
    37. // if($this->stufe == 0){
    38. // echo "<tr><td>Einsatz </td><td>".($this->einsatz+1)."/".count($this->operation)."</td></tr>";
    39. // echo "<tr><td>Vorname:</td><td>".$this->operation[$this->einsatz]->getFirstname()."</td></tr>";
    40. // echo "<tr><td>Nachname:</td><td>".$this->operation[$this->einsatz]->getLastname()."</td></tr>";
    41. // echo "<tr><td>Wohnort:</td><td>".$this->operation[$this->einsatz]->getLocation()."</td></tr>";
    42. // echo "<tr><td>Straße:</td><td>".$this->operation[$this->einsatz]->getStreet()."</td></tr>";
    43. // } else if($this->stufe == 1){
    44. // echo "<tr><td>Einsatz </td><td>".($this->einsatz+1)."/".count($this->operation)."</td></tr>";
    45. // echo "<tr><td>Stichwort:</td><td>".$this->operation[$this->einsatz]->getKeyword()."</td></tr>";
    46. // echo "<tr><td>Einsatznurmmer:</td><td>".$this->operation[$this->einsatz]->getOperationnr()."</td></tr>";
    47. // echo "<tr><td>Verletzte:</td><td>".$this->operation[$this->einsatz]->getInjured()."</td></tr>";
    48. // }
    49. // } else
    50. // echo "<tr><td>Einsatz </td><td>".($this->einsatz)."/".count($this->operation)."</td></tr>";
    51. // echo "</table>";
    52. // echo $this->einsatz.":".$this->stufe;
    53. }
    54. public function loadOperation(){
    55. $result = mysql_query("select operation.id as oid, firstname, lastname, location, street, keyword.name as keyw, injured, operationnr, message, comment from operation inner join keyword on keyword.id = operation.keyword where aktiv = 1 and operation.fs = '".$_SESSION["fs"]."'") or die("1".mysql_error());
    56. $i = 0;
    57. while ($line = mysql_fetch_array($result)){
    58. $result1 = mysql_query("select * from usedvehicle where operationid = ".$line["oid"]) or die("2".mysql_error());
    59. $vehicle = array();
    60. $j = 0;
    61. while ($line1 = mysql_fetch_array($result1)){
    62. $vehicle[$j] = $line1["vehicleid"];
    63. $j++;
    64. }
    65. $result2 = mysql_query("select * from usedloops where operationid = ".$line["oid"]) or die("3".mysql_error());
    66. $loop = array();
    67. $j = 0;
    68. while ($line2 = mysql_fetch_array($result1)){
    69. $loop[$j] = $line2["loopid"];
    70. $j++;
    71. }
    72. $this->operation[$i] = new class_operation($line["oid"], $line["firstname"],$line["lastname"],$line["location"],$line["street"],$line["keyw"],$line["injured"],$line["operationnr"],$line["message"],$line["comment"], $vehicle, $loop);
    73. $i++;
    74. }
    75. }
    76. }
    77. ?>


    Die Klasse zum speichern der Werte:
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. class class_operation{
    3. private $id;
    4. private $firstname;
    5. private $lastname;
    6. private $location;
    7. private $street;
    8. private $keyword;
    9. private $injured;
    10. private $operationnr;
    11. private $message;
    12. private $comment;
    13. private $vehicle; //Array
    14. private $loop; //Array
    15. function __construct($id, $fn, $ln, $lo, $st, $ke, $in, $op, $me, $co, $ve, $loo) {
    16. $this->id = $id;
    17. $this->firstname = $fn;
    18. $this->lastname = $ln;
    19. $this->location = $lo;
    20. $this->street = $st;
    21. $this->keyword = $ke;
    22. $this->injured = $in;
    23. $this->operationnr = $op;
    24. $this->message = $me;
    25. $this->comment = $co;
    26. $this->vehicle = $ve;
    27. $this->loop = $loo;
    28. }
    29. function getID(){
    30. return $this->id;
    31. }
    32. function getFirstname(){
    33. return $this->firstname;
    34. }
    35. function getLastname(){
    36. return $this->lastname;
    37. }
    38. function getLocation(){
    39. return $this->location;
    40. }
    41. function getStreet(){
    42. return $this->street;
    43. }
    44. function getKeyword(){
    45. return $this->keyword;
    46. }
    47. function getInjured(){
    48. return $this->injured;
    49. }
    50. function getOperationnr(){
    51. return $this->operationnr;
    52. }
    53. function getMessage(){
    54. return $this->message;
    55. }
    56. function getComment(){
    57. return $this->comment;
    58. }
    59. function getVehicle(){
    60. return $this->vehicle;
    61. }
    62. function getLoop(){
    63. return $this->loop;
    64. }
    65. }
    66. ?>





    So ich habe das Problem gefunden, ich include die .php Datei, die die Klasse initialisiert, jedes mal neu, wenn ich die load.php Datei über Ajax aufrufe. Nun stehe ich vor dem Problem, wie ich das Objekt von der eigendlichen .php Datei an die load.php Datei weitergeben kann.



    So habs nun gelöst, ich un / serializiere das Object, jeweils in den Dateien, die das Object benötigen, bzw. verändert haben.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Chris213“ ()