Array aus Objekten wie auf bestimmtes Object mit bestimmer ID zugreifen ?

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von xChRoNiKx.

    Array aus Objekten wie auf bestimmtes Object mit bestimmer ID zugreifen ?

    Hallöchen,

    ich stehe gerade auf dem Schlauch.

    Habe folgende Klasse:

    Spoiler anzeigen

    PHP-Quellcode

    1. Class Essen {
    2. public $name;
    3. public $sql_id;
    4. private static $_err_code = 0;
    5. private static $_allEssen = array ();
    6. public static function number_of_essen() {
    7. return count(self::$_allEssen);
    8. }
    9. public static function get_all_essen() {
    10. return self::$_allEssen;
    11. }
    12. public static function create_new_essen($name, $sql_id)
    13. {
    14. $essen = new Essen();
    15. $essen->name = $name;
    16. $essen->sql_id = $sql_id;
    17. self::$_allEssen[] = $essen;
    18. }
    19. public static function load_essen_per_month ($month = 9) {
    20. $pdo = Mysql::setup_connection();
    21. $sqlCmd = "SELECT * FROM ess_essen WHERE e_month = ". $month; // TODO
    22. foreach ($pdo->query($sqlCmd) as $row) {
    23. self::create_new_essen($row['e_name'], $row['e_id']);
    24. }
    25. $pdo = null;
    26. }
    27. public static function get_err_code() {
    28. return self::$_err_code;
    29. }
    30. public function edit_name ($newName) {
    31. $this->name = $newName;
    32. //TODO Change name in Database
    33. }
    34. }


    Nun bekomme ich mit:

    PHP-Quellcode

    1. Essen::get_all_essen()


    Alle "Essen"-Objecte die in dem Array $_allEssen sind.

    Hier mal ein print_r:
    Spoiler anzeigen

    Quellcode

    1. Array
    2. (
    3. [0] => Essen Object
    4. (
    5. [name] => Test Essen 3
    6. [sql_id] => 3
    7. )
    8. [1] => Essen Object
    9. (
    10. [name] => Essen 2314
    11. [sql_id] => 4
    12. )
    13. [2] => Essen Object
    14. (
    15. [name] => test essen
    16. [sql_id] => 5
    17. )
    18. [3] => Essen Object
    19. (
    20. [name] => adsasdasd
    21. [sql_id] => 6
    22. )
    23. [4] => Essen Object
    24. (
    25. [name] => adasdasd
    26. [sql_id] => 7
    27. )
    28. [5] => Essen Object
    29. (
    30. [name] => adasdasd
    31. [sql_id] => 8
    32. )
    33. )


    Gibt es einen schönen Weg um direkt auf ein Objeckt mit einer bestimmten "sql_id" zuzugreifen ?

    EDIT//
    ich habe jetzt mal die "sql_id" als Index für das object reingeschmissen.

    PHP-Quellcode

    1. public static function create_new_essen($name, $sql_id)
    2. {
    3. $essen = new Essen();
    4. $essen->name = $name;
    5. $essen->sql_id = $sql_id;
    6. self::$_allEssen[$sql_id] = $essen;
    7. }

    So kann ich nun per:

    PHP-Quellcode

    1. Essen::get_all_essen()[2]->edit_name("neuernamexD123123123");

    Ganz easy auf ein entsprechendes Object zugreifen. Gibt es noch einen schöneren Weg ?
    Für weitere Vorschläge oder Ansätze bin ich trotzdem offen
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xChRoNiKx“ ()

    Ein Beispiel:

    PHP-Quellcode

    1. <?php
    2. /**
    3. * Class Essen
    4. */
    5. class Essen {
    6. protected $Data = [];
    7. /**
    8. * Essen constructor.
    9. * Um ein Objekt zu erstellen
    10. *
    11. * @param null $id
    12. */
    13. public function __construct($id = null) {
    14. if ($id != null) {
    15. $d = MyDatabase::query("SELECT * FROM `ess_essen` WHERE `id` = " . (int)$id)->fetchAll();
    16. if ($d) {
    17. $this->Data = $d;
    18. }
    19. }
    20. }
    21. /**
    22. * Ein Array mit lauter Essen Objekten
    23. *
    24. * @return Essen[]
    25. */
    26. public static function getAll() {
    27. $Data = [];
    28. $d = MyDatabase::query("SELECT `id` FROM `ess_essen`");
    29. if ($d) {
    30. foreach ($d as $row) {
    31. $Data[] = new self((int)$row['id']);
    32. }
    33. }
    34. return $Data;
    35. }
    36. /**
    37. * Prüfen ob ein Feld existiert
    38. *
    39. * @param string $key
    40. *
    41. * @return bool
    42. */
    43. public function exists($key = 'id') {
    44. return array_key_exists($key, $this->Data);
    45. }
    46. /**
    47. * Getter
    48. *
    49. * @param $key
    50. * @param string $alt
    51. *
    52. * @return mixed|string
    53. */
    54. protected function get($key, $alt = '') {
    55. return $this->exists($key) ? $this->Data[$key] : $alt;
    56. }
    57. /**
    58. * Ausgabe der Daten
    59. */
    60. public function debug() {
    61. echo "<pre>" . print_r($this->Data, true) . "</pre>";
    62. }
    63. /**
    64. * Gibt ID zurück
    65. *
    66. * @return int
    67. */
    68. public function getId() {
    69. return (int)$this->get('id');
    70. }
    71. /**
    72. * Gibt den Namen zurück
    73. *
    74. * @return mixed|string
    75. */
    76. public function getName() {
    77. return $this->get('name');
    78. }
    79. /**
    80. * Name festlegen
    81. *
    82. * @param $value
    83. */
    84. public function setName($value) {
    85. $this->set('name', $value);
    86. }
    87. /**
    88. * Setter
    89. *
    90. * @param $key
    91. * @param $value
    92. */
    93. protected function set($key, $value) {
    94. $this->Data[$key] = $value;
    95. }
    96. /**
    97. * Neuen Datensatz erstellen
    98. *
    99. * @return int
    100. */
    101. public function create() {
    102. $stmt = "INSERT INTO `ess_essen` SET ";
    103. $Fields = [];
    104. foreach ($this->Data as $k => $v) {
    105. $Fields[] = "`" . $k . "` = " . MyDatabase::quote($v);
    106. }
    107. $stmt .= implode(', ', $Fields);
    108. return MyDatabase::exec($stmt);
    109. }
    110. /**
    111. * Datensatz updaten
    112. *
    113. * @return int
    114. */
    115. public function update() {
    116. $stmt = "UPDATE `ess_essen` SET ";
    117. $Fields = [];
    118. foreach ($this->Data as $k => $v) {
    119. if ($k == 'id') {
    120. continue;
    121. }
    122. $Fields[] = "`" . $k . "` = " . MyDatabase::quote($v);
    123. }
    124. $stmt .= implode(', ', $Fields);
    125. $stmt .= " WHERE `id` = " . $this->getId();
    126. return MyDatabase::exec($stmt);
    127. }
    128. }
    129. # Alle holen
    130. $All = Essen::getAll();
    131. if ($All) {
    132. # Erstmal alle fetchen und ausgeben
    133. foreach ($All as $Essen) {
    134. $Essen->debug();
    135. }
    136. # Irgendeins nehmen und verändern
    137. $Irgendeins = $All[0];
    138. $Irgendeins->setName("Neuer Name");
    139. $Irgendeins->update();
    140. # Ein neues erstellen
    141. $Neu = new Essen();
    142. $Neu->setName("Neuer Name");
    143. $Neu->create();
    144. }
    145. ?>


    Du kannst den Shit auch anpassen und dann dazu nochmal ne Frage stellen wenn's ist: klick

    Link :thumbup:
    Hello World

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