Tilgå global variabel i en function.

Her kan du få hjælp og stille spørgsmål til PHP!
Besvar
jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57
Tilgå global variabel i en function.

Indlæg af jepperask » 6. mar 2015, 19:34

Jeg troede jeg havde styr på scope, men jeg forstår simpelthen ikke hvorfor det her ikke virker.
I min config.php opretter jeg variablen $con, som jeg i mit andet script vil tilgå.

config.php

Kode: Vælg alt

$con = mysqli_connect("x", "x", "x", "x");
.. et andet script hvor fejlen opstår:

Kode: Vælg alt

<?php
	include 'config.php';
	
	function blabla() {
		global $con;
		$query = "En eller anden MySQL-forespørgsel";
		$sql = mysqli_query($con, $query);
	}
Hvorfor virker det ikke? Jeg har også prøvet at 'søge' med $GLOBALS['con']. Begge filer ligger i samme mappe også.

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 6. mar 2015, 20:31

Eventuelt lav din kode om til den objekt orienterede syntax da dem du bruger bare er alias for den objekt orienterende syntax.
Også test om der sker nogen fejl.
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 6. mar 2015, 21:29

scootergrisen skrev:Eventuelt lav din kode om til den objekt orienterede syntax da dem du bruger bare er alias for den objekt orienterende syntax.
Også test om der sker nogen fejl.
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
Ingen forskel..

Desuden: http://stackoverflow.com/questions/1570 ... li-connect

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 6. mar 2015, 22:32

Har du kaldt blabla funktionen ?

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 6. mar 2015, 22:39

scootergrisen skrev:Har du kaldt blabla funktionen ?
Ja, fejlkoden siger at $con er null. 'global' bruges vel til at sige "led efter en variabel der er defineret i global-scope", ikke?


Burde de 2 her ikke gøre akkurat det samme?

Kode: Vælg alt

include 'config.php';

function bla() {
    $con = new mysqli("x","x","x","x");
    $query = "SELECT * FROM x";
    $sql = mysqli_query($con, $query);
    mysqli_close($con);
    return $sql;
}

function bla() {
    global $con;
    $query = "SELECT * FROM x";
    $sql = mysqli_query($con, $query);
    mysqli_close($con);
    return $sql;
}

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 6. mar 2015, 22:59

Det vil jeg mene bortset fra at du blander procedural og objekt orienterede syntax sammen.

Men din kode forudsætter at der ikke er noget som går galt.

Du kan teste hvad de forskellige ting returnere også slå fejlrapportering til først i din kode så du får besked når noget går galt.
Som når der ikke kan oprettes forbindelse til serveren eller ikke er noget data at hente og dermed heller ikke er noget data at vise.

Kode: Vælg alt

<?php

ini_set("display_errors", "On"); // fejl som en del af outputtet
ini_set("display_startup_errors", "On"); // fejl som sker mens PHP starter
ini_set("error_reporting", -1); // -1 viser alle slags fejlbeskeder

?>

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af Daniel » 7. mar 2015, 03:04

Ved at PHP tidligere har haft problemer med global, hvis det er det problem du oplever, så er løsningen at indsætte global $con; i din config.php fil.

config.php

Kode: Vælg alt

global $con;
$con = mysqli_connect("x", "x", "x", "x");
Ikke sikkert det er løsningen, men det er da et forsøg værd. :)

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 11. sep 2015, 19:43

Nå, jeg kom lidt fra det, men har igen taget problemet op.
Jeg har læst mig til, at global benyttes således: "within the scope of this function, use the global variable $foo".

Kode: Vælg alt

$globalVariable = "variable-value"; //global variable

function testFunction() {
    global $globalVariable;
    echo $globalVariable;
}
EDIT: Kan se at det er det samme som jeg startede med at skrive.. HM.
.. må indrømme jeg bedre kan lide Java på dét punkt. :D

Bonus-info:

Jeg har brugt det til at lave en mysqli-forbindelse:

Kode: Vælg alt

$con = new mysqli(x,x,x,x) or die(mysqli_error());

function test() {
    global $con;
    $sql = mysqli_query($con, ".. en query");
    mysqli_close($con);
    return $sql;
}
Problemet er bare at mysqli_close($con) ikke fungerer ordenligt når det er en global, så indtil videre må jeg undvære. Må lige læse på det.
Senest rettet af jepperask 16. sep 2015, 22:10, rettet i alt 1 gang.

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 11. sep 2015, 20:40

Du kan sende variablen til funktionen når du kalder den.

Kode: Vælg alt

$variabel = "eksempel";

function testFunction($test = "standard værdi") {
    echo $test;
}

testFunction(); // "standard værdi"
testFunction($variabel); // "eksempel"

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 11. sep 2015, 20:45

scootergrisen skrev:Du kan sende variablen til funktionen når du kalder den.

Kode: Vælg alt

$variabel = "eksempel";

function testFunction($test = "standard værdi") {
    echo $test;
}

testFunction(); // "standard værdi"
testFunction($variabel); // "eksempel"
True, men det er bare ikke særligt hensigtsmæssigt at skulle sende sine database-oplysninger med som funktions-parameter.

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 11. sep 2015, 20:50

Hvorfor ikke?

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 11. sep 2015, 21:03

scootergrisen skrev:Hvorfor ikke?
For mit vedkommende vil det betyde inkludere mine database-oplysninger i alle de filer hvor jeg vil benytte funktionen/funktionerne - fremfor bare at definere dem ét sted.
- desuden kan jeg ikke se pointen i at have en parameter, hvis den uanset tilfælde vil være den samme.

Brugeravatar
scootergrisen
Moderator
Moderator
Indlæg:709
Tilmeldt:21. jun 2012, 23:40
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af scootergrisen » 11. sep 2015, 21:15

Du kan have oplysningerne i en fil du inkludere også bruge $GLOBALS.
http://php.net/manual/en/reserved.variables.globals.php

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Tilgå global variabel i en function.

Indlæg af jepperask » 11. sep 2015, 21:19

scootergrisen skrev:Du kan have oplysningerne i en fil du inkludere også bruge $GLOBALS.
http://php.net/manual/en/reserved.variables.globals.php
Det er også det jeg gør. Forskellen er bare om jeg inkluderer dem og kalder funktionen med databaseoplysninger som parameter - eller om jeg bare inkluderer dem direkte hvor funktionen er skrevet. Så sparer jeg en parameter på alle de funktioner som skal have adgang til databasen.

andershagbard
Begynder
Indlæg:7
Tilmeldt:2. okt 2015, 17:49
Kontakt:

Re: Tilgå global variabel i en function.

Indlæg af andershagbard » 2. okt 2015, 18:53

Brug use()

Kode: Vælg alt

function blabla() use($con) {
	$query = "En eller anden MySQL-forespørgsel";
	$sql = mysqli_query($con, $query);
}

Besvar