Marty: PHP Nutzung von globalen Variablen ?

Hallo,

ich bin PHP Einsteiger und verstehe grad nicht mehr warum unterer Code den Fehler "Invalid argument supplied for foreach() ..." erzeugt. ich möchte eigentlich nur Logs/Meldungen aus verschiedenen Scripten sammeln und am Schluß ausgeben! Ich dachte da könnte ich mir eine zentrale Stelle bauen, aber irgendwie will das nicht :( ... Hat jemand Rat?

<?php
global $logs;

function addLog($log) {
  $logs[] = $log;
}

function printLogs() {
  foreach ($logs as $log) {
    echo 'Log :: ' .$log;
  }
}

addLog('PALIM PALIM');
printLogs();
?>

  1. Hi!

    ich bin PHP Einsteiger und verstehe grad nicht mehr warum unterer Code den Fehler "Invalid argument supplied for foreach() ..." erzeugt.

    Deine Funktion printLogs()kennt das Array $logs nicht.

    Entweder Du übergibst dieses als Parameter an die Funktion, oder Du nutzt global dort wo es sinnvoll ist - innerhalb der Funktion.

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Hi!
      Deine Funktion printLogs()kennt das Array $logs nicht.

      Entweder Du übergibst dieses als Parameter an die Funktion, oder Du nutzt global dort wo es sinnvoll ist - innerhalb der Funktion.

      das versteh ich ehrlich gesagt nicht. wo kann ich denn dann meldungen aus verschiedenen scripten (die nacheinander ablaufen) ablegen?
      ich habe gedacht man nutzt dazu eine globale variable und fügt der dann immer die meldungen hinzu. am ende aller scripte gebe ich dann z.b. alle meldungen aus. geht sowas in php gar nicht?

      1. Hallo,

        » Entweder Du übergibst dieses als Parameter an die Funktion, oder Du nutzt global dort wo es sinnvoll ist - innerhalb der Funktion.

        das versteh ich ehrlich gesagt nicht.
        ich habe gedacht man nutzt dazu eine globale variable

        nutze sowenig globale Variablen wie möglich, ich persönlich benutze fast nie globale Variablen.

        und fügt der dann immer die meldungen hinzu. am ende aller scripte gebe ich dann z.b. alle meldungen aus. geht sowas in php gar nicht?

        sicher geht das auch in PHP, aber eben nicht so, wie Du Deine Variable deklariert hast, sondern so, wie es Peter Pan sagt:

        "oder Du nutzt global dort wo es sinnvoll ist - innerhalb der Funktion."

        siehe Handbuchabschnitt zum Schlüsselwort global.

        Freundliche Grüße

        Vinzenz

      2. Hallo

        »» Entweder Du übergibst dieses als Parameter an die Funktion, oder Du nutzt global dort wo es sinnvoll ist - innerhalb der Funktion.
        das versteh ich ehrlich gesagt nicht. wo kann ich denn dann meldungen aus verschiedenen scripten (die nacheinander ablaufen) ablegen?

        Gehe ich recht in der Annahme, dass die zu überwachenden Skripte unabhängig voneinander und zu verschiedenen Zeit(punkt)en laufen?

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.3
  2. Hello,

    Wenn Du Willst, dass in einer Funktion ein bestimmter Wert oder eine Werteliste bekannt ist, dann solltest Du diese auch an die Funktion übergeben. Das Arbeiten mit Funktionen ist immer dann sinnvoll, wenn die gleichen Operationen mehrfach durchgeführt werden müssen oder dies bereits vorherzusehen ist.

    Außerdem solltest Du eindeutig identifizerende Bezeichner für die Argumente benutzen, das vreinfacht später das Leben mit dem Umgang älterer bereits fertiggestellter Funktionen.

    <?php

    # ...

    function printLogs($_loglist)
      {
          foreach ($_loglist as $logentry) {
          echo 'Log :: ' .$log;
          }
      }

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hellihello

    es gibt auch $GLOBALS und Klassenvariablen, die im Klassen-scope global sind.

    class MyLogController
    {
     $logs = array();
     function addLog($log) {
      $this->log[] = $log;
     }
     function getLogs() {
      return $this->logs;
     }
    }
    $mylog = new MyLogController;
    $mylog->addLog($someLog);
    var_dump($mylog->getLogs);

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt