OOP (PHP4) Objekt löschen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OOP (PHP4) Objekt löschen

    Hallo,

    ich habe hier mehrere Klassen geschrieben und scheitere momentan am Löschen eines Objektes.
    Folgender Sachverhalt: Ich habe eine Reihe von Gruppierungsblöcken. In diesen Blöcken können Frageblöcke drin sein. Diese wiederum setzen sich aus einzelnen Fragen zusammen.
    Klassen die ich geschrieben hab: group.class.php, block.class.php, question.class.php

    Nun habe ich in der Klasse Gruppe (group) die zugehörigen Blöcke als Array definiert. Das hinzufügen ist somit einfach, allerdings funktioniert mein Löschen eines Blockes nicht. Ich finde keinen Fehler, da ich auch relativ neu in OOP bin.

    hier mal die Klasse group.class.php

    Quellcode

    1. <?php
    2. /*
    3. * Klassenname: group.class.php
    4. */
    5. include('block.class.php');
    6. class Group{
    7. var $groupID;
    8. var $blocks;
    9. var $blockNumber;
    10. var $name;
    11. function Group($id = 0, $b = '', $n = ''){
    12. $this->groupID = $id;
    13. if(empty($b)){
    14. $this->blocks = array();
    15. $this->blockNumber = 0;
    16. } else {
    17. $this->blocks = $b;
    18. $this->blockNumber = count($b);
    19. }
    20. $this->name = $n;
    21. }
    22. function setID($id){
    23. $this->groupID = $id;
    24. }
    25. function getID(){
    26. return $this->groupID;
    27. }
    28. function addBlock($b){
    29. $this->blocks[] = $b;
    30. $this->blockNumber++;
    31. }
    32. function getBlocks(){
    33. return $this->blocks;
    34. }
    35. function &getBlock($id){
    36. foreach($this->blocks as $key => $val){
    37. if($val->getID() == $id){
    38. return $val;
    39. }
    40. }
    41. }
    42. function setName($n){
    43. $this->name = $n;
    44. }
    45. function getName(){
    46. return $this->name;
    47. }
    48. function delBlock($id){
    49. foreach($this->getBlocks() as $key => $val){
    50. if($val->getID() == $id){
    51. $block =& $this->getBlock($id);
    52. echo "lösche: ".$block->getName();
    53. unset($block);
    54. }
    55. }
    56. $this->blockNumber--;
    57. printr($this->blocks);
    58. }
    59. }
    60. ?>
    Alles anzeigen


    P.S. alle echos sind Testausgaben, PHP4 muss sein, ist ne Vorgabe vom Server/Auftraggeber

    Danke im Voraus
  • Oo unter php4.. gibts was schlimmeres? Also $block ist eine Klasse, oder? Weil in php4 werden Kopien der Objekte übergeben. In php5 aber die Referenzen.

    Da sollte man lieber in ein Softwareupdate investieren, als das Geld für die Entschädigung deiner Qualen herauszuwerfen.

    @Problem:
    Versuch mal.

    Quellcode

    1. function delBlock($id){
    2. $this->blocks = array_filter($this->getBlocks, create_function('$a','return $a->getID() == '.$id.';'));
    3. }
  • hmm, ja $block ist eine Klasse...

    also deine Funktion ist gut, nur leider gibt die mir den zu löschenden BLock aus, nicht die restlichen (das sollte sie aber, oder? )

    Ja mit PHP4 ist halt noch bis zum "Sommer" so. So toll das auch klingt, ich muss es erstmal in v4 machen, vllt kommt ja der Sommer bald, sodass ich es portieren kann...

    Danke dir, vielleicht fällt mir ja jetzt die Lösung ein...

    cya

    EDIT:

    hab jetzt ne Lösung, wenig elegant, aber sie funzt:

    Quellcode

    1. function delBlock($id){
    2. $arr = $this->getBlocks();
    3. $del = array_filter($arr, create_function('$a','return $a->getID() == '.$id.';'));
    4. unset($arr[$id]);
    5. $this->blocks = $arr;
    6. }


    danke dir...
  • hatte ich auch schon überlegt, aber ich dachte, dann gibt er mir nur ein Ergebnis raus?

    ich probiers mal...

    EDIT: funzt einwandfrei... *grübel*


    kannst du mir nochmal etwas genauer erklären, wie dein Ausdruck da arbeitet?
    Danke!

    cya

    endgültige Lösung:

    Quellcode

    1. function delBlock($id){
    2. $this->blocks = array_filter($this->getBlocks(), create_function('$a','return $a->getID() != '.$id.';'));
    3. }