webForumDet fria alternativet

Använda class/funktion innuti en annan funkion

PHP

2 svar · 364 visningar · startad av Freppa

Medlem sedan maj 20057 inlägg
Frågan#1

Hur gör jag för att kunna använda en databas-class som jag har skapat innuti en annan funktion?
Den fungerar utmärkt utanför funktionen men inte innifrån..

Kanske är lite lättare med ett exempel..

Lite förenklat jämfört med verkligheten men principen är densamma.

det här fungerar alltså:

<?php
require_once 'db.php';
$db = new DB_framework($CONFIG->dbuser, $CONFIG->dbpassword, $CONFIG->db, $CONFIG->dbserver);

$data = $db->get_var('SELECT antal FROM order WHERE id = 1'); // FUNGERAR!
echo $data;

?>

medans detta inte fungerar och ger felet:
Fatal error: Call to a member function get_var() on a non-object in *********.php on line 8

<?php
require_once 'db.php';
$db = new DB_framework($CONFIG->dbuser, $CONFIG->dbpassword, $CONFIG->db, $CONFIG->dbserver);

echo test();

function test() {
     $data = $db->get_var('SELECT antal FROM order_turnils WHERE id = 1'); // FUNGERAR INTE!
     return $data;
}
?>

vad gör jag för fel?

Medlem sedan mars 20007 896 inlägg
#2

Instansen av DB_Framwork är inte synlig inuti din funktion. Det finns två sätt att lösa det på;

Med 'global':

function test() {
     global $db;
     $data = $db->get_var('...');
     ...
}

Eller genom att skicka in DB_framwork-instansen som en parameter: (rekommenderas)

echo test($db);

function test($db) {
    $data = $db->get_var('...');
    ...
}
Medlem sedan maj 20057 inlägg
#3

Tack, det borde lösa saken :)
Funderade lite på globals men var inte helt säker på som det var "korrekt" att göra så..
I det här fallet får det bli den lösningen eftersom jag måste få ut det färdiga svaret ur funktionen då den ingår i ett ajax-anrop.

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
136 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)