Netti: Frage zu Variablen und Arrays

Hallo zusammen,

kann ich ein Element aus einem Array in allen Punkten genauso behandeln, wie eine Variable?

$arr['elem77'] also genau wie $test77 behandeln?

Beispiele:

$test77++;
global $test77;
$test77 = $test88;
usw.

Oder gibt es Dinge, die ich berücksichtigen muß?

Hintergrund:

Ich stelle gerade eine Reihe von Variablen so um, dass die Variablen nun alle in einem Array sind und bin unsicher, ob ich dabei nicht noch etwas berücksichtigen muß.

Danke für Hilfe, Netti

  1. Hallo,

    Ich stelle gerade eine Reihe von Variablen so um, dass die Variablen nun alle in einem Array sind und bin unsicher, ob ich dabei nicht noch etwas berücksichtigen muß.

    Theoretisch geht das, praktisch ist das ganz großer Mist.

    - Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.
     - Du baust dir mit dem Array eine Art Gott-Objekt, was nach Softwaredesigngrundlagen ein "No GO" ist.
     - Du machst den Code unübersichtlich, weil alle Referenzierungen auf $deinArray verweisen.

    Für die Antworten auf deine anderen Fragen, wende dich an den PHP-Laufzeitinterpreter deines Vertrauens ;-). Soll heißen: Probiere es selbst aus, das ist nicht schwer.

    Grüße

      • Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.

      Nein, er will ganz andere Variablen verwenden.

      • Du baust dir mit dem Array eine Art Gott-Objekt, was nach Softwaredesigngrundlagen ein "No GO" ist.

      Er spricht aber nicht von einem Gott-Objekt, sondern er möchte viele Elemente in einem einziger Variable anfassen können.

      • Du machst den Code unübersichtlich, weil alle Referenzierungen auf $deinArray verweisen.

      Das Wort "alle" ist deine Interpretation.
      Die Codeverständlichkeit von $scalar1234 ist auch nicht so besonders.

      Für die Antworten auf deine anderen Fragen, wende dich an den PHP-Laufzeitinterpreter deines Vertrauens ;-). Soll heißen: Probiere es selbst aus, das ist nicht schwer.

      1000 Scalare sind auch nicht gerade Zegnis von flexibler Programmierung.

      Die Regel besagt, verwende einen Variablentyp, der dem Inhaltstyp entspricht.
      Ist der Inhalt der Variable ein eindeutiger scalarer Inhalt, verwende einen Scalar.
      Handelt es sich um viele Elemente eines Typs, verwende einen Array.
      Sind die Elemente zusätzlich durch einen Schlüssel markiert, so verwende einen assoziativen Array.

      Hint: Wann immer man Elemente gleich behandeln kann, dann sind es keine Kandidaten für scalare sondern für andere Datenstrukturen.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
        • Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.

        Nein, er will ganz andere Variablen verwenden.

        Da auch nach "global" gefragt wurde, muss ich davon ausgehen, dass das Array wandert -> Vorher nicht zugängliche Variablen werden auf einmal zugänglich.

        Das Wort "alle" ist deine Interpretation.
        Die Codeverständlichkeit von $scalar1234 ist auch nicht so besonders.

        Und wird durch $array['scalar1234'] auch nicht besser. Nur eine Umbenennung bringt hier etwas.

        Grüße

    1. Hi,

      • Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.

      nein, die Sichtbarkeit ("Scope") bleibt exakt dieselbe, egal ob ich eine einzelne skalare Variable oder ein Array habe. Lediglich die von PHP vordefinierten Superglobalen ($_POST, $_GET, $_SERVER usw.) haben eine Sonderstellung.

      • Du baust dir mit dem Array eine Art Gott-Objekt, was nach Softwaredesigngrundlagen ein "No GO" ist.

      Das halte ich in der Pauschalität für falsch. Es gibt genügend Beipsiele, in denen es ausgesprochen sinnvoll ist, ein bestimmtes Objekt (eine Datenstruktur) im globalen Scope vorzuhalten - zum Beispiel wenn es um allgemeine Konfigurationsdaten geht.

      • Du machst den Code unübersichtlich, weil alle Referenzierungen auf $deinArray verweisen.

      Geschmackssache. Was ist übersichtlicher: fünfzig unterschiedlich benamste einfache Variablen, oder ein Array mit fünfzig Feldern unterschiedlichen Namens? Für mich ist das Jacke wie Hose.

      So long,
       Martin

      --
      Lebensmotto der Egoisten:
      Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hallo,

        • Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.

        nein, die Sichtbarkeit ("Scope") bleibt exakt dieselbe, egal ob ich eine einzelne skalare Variable oder ein Array habe.

        Und wenn noch weitere Daten in dem Array stehen?

        • Du baust dir mit dem Array eine Art Gott-Objekt, was nach Softwaredesigngrundlagen ein "No GO" ist.

        Das halte ich in der Pauschalität für falsch. Es gibt genügend Beipsiele, in denen es ausgesprochen sinnvoll ist, ein bestimmtes Objekt (eine Datenstruktur) im globalen Scope vorzuhalten - zum Beispiel wenn es um allgemeine Konfigurationsdaten geht.

        Nach meinem Verständnis der Frage geht es aber nicht um Konfigurationsdaten, sondern um eine Zusammenführung von verschiedenen Variablen in einem Array. Das halte ich für schlecht, unter der Voraussetzung, dass der Code vorher "sauber" war.

        Grüße

        1. Hallo,

          • Du veränderst die Sichtbarkeit der Variablen, was zu Fehlern in der Programmlogik führen kann.

          Inwiefern verändere ich die?
          Eventuell war nur mein Beispiel irreführend.
          Aus $hintergrundfarbe wird $config['hintergrundfarbe'];

          Nach meinem Verständnis der Frage geht es aber nicht um Konfigurationsdaten,...

          Doch, genau darum geht es aber.

          Vielleicht hätte ich das klarer machen sollen. Sorry.

          Ich hatte aber auch nicht bedacht, dass das wichtig sein könnte, da ich eigentlich nur wissen wollte, ob ich das Arrayelement wie eineVariable behandeln darf...

          Gruß, Netti

          1. Hi!

            Ich hatte aber auch nicht bedacht, dass das wichtig sein könnte, da ich eigentlich nur wissen wollte, ob ich das Arrayelement wie eineVariable behandeln darf...

            Für die eigentliche Frage ist es nicht wichtig. Die ist kurz mit "ja" zu beantworten. Ob das Vorhaben insgesamt sinnvoll ist, muss man aus struktureller und programmtechnischer Sicht klären. Ob Array-Elemente wie Variablen behandelt werden können, spielt dabei aber keine Rolle.

            Lo!

  2. hi,

    Oder gibt es Dinge, die ich berücksichtigen muß?

    Ja.

    Hintergrund:

    Ich stelle gerade eine Reihe von Variablen so um, dass die Variablen nun alle in einem Array...

    Grundsätzlich ist es eine gute Idee, zusammengehörige Werte, Daten in einem Array oder einer ähnlichen Datenstruktur zusammenzufassen. Der Vorteil liegt darin, dass Du in eine Methode/Funktion nur noch _eine Variable übergeben brauchst und hast dann sozusagen alles dabei. Der genannte Begriff 'Methode' zielt darauf ab, die Sache objektorientiert anzugehen, Deine Datenstruktur ist dann ein Objekt, mit dem die Methoden aufgerufen werden.

    Aber Du musst aufpassen, insbesondere dann, wenn Du mit Referenzen arbeitest: Methoden verändern ggf. die Eigenschaften eines Objekts (hinzufügen, löschen, ändern), nach Aufruf solcher Methoden musst Du also genau wissen, was Du tust und welche Werte in dem Objekt zu erwarten sind. Es kann also mächtig in die Hose gehen, mit einem Objekt mehrere Methoden nacheinander aufzurufen; das ist jedoch wieder eine organisatorische Frage.

    Hotti

  3. Hi Netti.

    kann ich ein Element aus einem Array in allen Punkten genauso behandeln, wie eine Variable?

    Nicht ganz.

    global $test77;

    Das geht im Array-Fall nicht mit einzelnen Feldern. Du kannst nur Variablen global machen, und die Variable ist dann das Array, nicht das Feld.

    Viele Grüße,
    der Bademeister