funktionen in funktionen

  • Themenstarter Themenstarter grkpfl
  • Beginndatum Beginndatum
G

grkpfl

Hallo!

Mir ist grade aufgefallen, das ein solcher Code einwandfrei funktioniert:
PHP:
function a()
{
    echo "a";
    
    function b()
    {
        echo "b";
    }
}    

a();
b();

Meine Frage ist nun, ob das zu irrgendwelchen Problemen oder Einschränkungen führen könnte oder ob das wirklich haargenau das selbe bewirkt wie:
PHP:
function a()
{
    echo "a";
}

function b()
{
    echo "b";
}

a();
b();
 
Empfehlenswert ist die erste Variante keinesfalls. Wobei dies wiederum vom Verwendungszweck abhängig ist. Aufjedenfall würde ich bei der ersten Variante, immer mit der Funktion function_exists Arbeiten, um unnötige Fehler und Abbrüche zu vermeiden ;)

Grüße
 
Der Nachteil an der ersten Version ist natürlich, dass du b() erst aufrufen kannst, nachdem a() aufgerufen wurde, ansonsten bekommst du diesen schönen Error
Fatal error: Call to undefined function b() in test.php on line 14

Ergo ist es nicht wirklich sinnvoll in meinen Augen.
 
Hey SUPER O____O!
Das muss Gedankenübertragung sein! Ich wollte gerade einen Thread mit dem gleichen Titel aufmachen :-)
Ich habe da nämlich folgende Frage:
Wie rufe ich am besten eine function in einer anderen function auf?
Damit meine ich folgendes prinzip (aber das geht ja so leider nicht):
PHP:
function a() 
{ 
    return "a"; 
}     

function b() 
{ 
    return a(); 
    return "b"; 
} 

b();

Und dann hätte ich noch eine zweite Frage (die allerdings etwas vom Thema abweicht, ein neuer Thread aber wohl überflüssig wäre)
Ich habe eine function.php (mit functionen drin *G*) die ich in meine Hauptdatei index.php einbinde (mit require("function.php");). Von dort aus können alle anderen Dateien auf diese functionen zugreifen, solange sie mit einer SessionID in der index.php aufgerufen werden.
PHP:
switch ($_GET["id"]) {
case "LINK1":
$site = "./pages/links/index.php";
break; 
//...usw.
}
echo $site;
Nun meine Frage, ich stelle in der index.php eine Verbinde zu einer SQL Datenbank her:
PHP:
$db = mysql_connect("$connect[adresse]", "$connect[user]", "$connect[passwort]") or die("Keine Verbindung zur Datenbank.");
mysql_select_db("$connect[dbname]");
nun kann ich auch auf jeder anderen Seite auf Tabellen aus der Datenbank zugreifen, solange diese Seiten mit einer SessionID mit der index.php verbunden sind.
Tabelle in DB aufrufen:
PHP:
$sql="SELECT ID, name, visible FROM admin_log WHERE (IP = '$IP' AND SessionID = '$_GET[modul]') LIMIT 1";
$handle = mysql_query($sql, $db);
for($i=0;$i<mysql_num_rows($handle);$i++)
{
$delete[$i]=mysql_fetch_array($handle);
}
Leider kann ich mit dem letzten Code ($sql="SELECT...) keine Tabellen aufrufen, wenn ich das von der function.php mache, da diese ja nicht über eine SessionID über die index.php läuft...
Was kann ich da machen? (hoffe ich habe mich verständlich ausgedrückt ^^°)

Gruß und gute Nacht
Sturmrider
 
PHP:
function a() 
{ 
    return "a"; 
}     

function b() 
{ 
    return a(); 
    return "b"; 
}
Pro Funktion kann man nur ein Return haben!
Du könntest allerdings ein Array z. B. zurückgeben.
PHP:
function a() {
  return "a";
}
function b() {
  $var['a'] = a();
  $var['b'] = "b";
  return $var;
}

print_r(b());

Zum zweiten fällt mir spontan nicht viel ein, nur dass du ja den Aufruf für die Funktion in der index.php setzen kannst und die Werte übergibst, z. B. so:
PHP:
# Beispielfunktion in der functions.php
function sql_get($ip, $sid) {
  $sql="SELECT ID, name, visible FROM admin_log WHERE (IP = '".$ip."' AND SessionID = '".$sid."') LIMIT 1";
  $handle = mysql_query($sql, $db);
  for($i=0;$i<mysql_num_rows($handle);$i++)
  {
    $delete[$i]=mysql_fetch_array($handle);
  }
} 
#Aufruf in der index.php
sql_get($_SERVER['REMOTE_ADDR'], $_GET['module']);
So oder so ähnlich könnte es aussehen, die Funktionen die ich gewählt habe sind natürlich erstmal vollkommen sinnlos ;)
 
Wenn ich dich richtig verstanden hab, baust du in der index.php die Verbindung zur Datenbank auf? Und die functions.php wird in die index.php eingebunden? Dann solltest du eigentlich SQL-Abfragen an die Datenbank schicken können, solange du die functions.php nach der Datenbankverbindung einbindest.
 
*nickt* k, danke
die 1.Frage mit der Funktion ist geklärt ^^

und eine Antwort auf meine 2. Frage habe ich nun selber gefunden ;)

PHP:
    $sql = "SELECT * FROM m_admin_log WHERE (IP = '" . mysql_real_escape_string($IP, $db) . "') AND (SessionID='" . mysql_real_escape_string($SID,$db) . "') LIMIT 1";

hätte da hingemusst ;)

Gruß Sturmrider
 
Zurück