Frage

Die Situation:

index.php:

<?php
    include("foo.php");
    include("baz.php");
        foo("bar.php");
?>

baz.php:

<?php
    $x = 42;
?>

foo.php:

<?php
    function foo($p) {
        include_once($p); // please dont mind the inclusion hole
    }
?>

bar.php:

<?php
    echo $x;
?>

Zend beachten:Undefinierte Variable:X

Globales $x platzieren;in bar.php entfernt den Hinweis, aber ich verstehe, warum es überhaupt einen Hinweis dazu gibt.Ist nicht so viel Arbeit wie das Einfügen von C-Headern enthalten?Das würde bedeuten, dass der interpretierte Code so aussehen würde:

<?php
    function foo($p) {
        include_once($p); // please dont mind the inclusion hole
    }
    $x = 42;

    // this however, is included by a function...
    // does the function's scope influence the stuff it includes?
    echo $x; // undefined variable
?>

Mein Editor ist das Eclipse/Zend-Paket.

War es hilfreich?

Lösung

Ich bin kein Experte, also bitte Flamme mich nicht, wenn ich falsch, aber ich denke, die von include_once oder require_once aufgerufenen Datei im Kontext des Anrufers genannt wird. Da Funktion foo () werden nicht über dann $ wissen x weder wird eine ihrer genannt enthält. Sie könnten experimentieren, indem wie oben $ x innen Funktion foo () mit dem gleichen Setup ‚erklärt‘.

Andere Tipps

Ich bekomme eine Menge dieser Hinweise, da ich fast immer „$o .= 'foo'“ ohne Definition verwende.Ich verstecke sie nur mit error_reporting(E_ALL ^ ​​E_NOTICE), aber ich weiß nicht, ob es in diesem Fall der optimale Weg ist.

Es funktioniert nicht, auch wenn die Variablen und die Funktion in der gleichen Datei sind.

  1 <?php
  2
  3 $x = 3;
  4
  5 function t()
  6 {
  7   echo $x;
  8 }
  9
 10 t();

Prints nichts.

Aber fügen Sie eine globale

  1 <?php
  2
  3 $x = 3;
  4
  5 function t()
  6 {
  7   global $x;
  8   echo $x;
  9 }
 10
 11 t();

und Sie können sehen, "3".

In einer Funktion können Sie keine globalen Variablen sehen, wenn Sie es erklären.

ja sein der Funktionsumfang, die Ihre Probleme verursachen

Wenn Sie ersetzen

foo("bar.php");

mit

include("bar.php");

Sie werden sehen, dass alles funktioniert, weil sie es in den aktuellen Bereich setzt und nicht die Funktionen Anwendungsbereich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top