[PHP] Global in class

Status
Niet open voor verdere reacties.

Jori13

Gebruiker
Lid geworden
18 jan 2010
Berichten
159
Hallo,

Een klein probleempje


Ik heb een include file die via mysqli contact maakt met een database. Ik gebruik de OO versie. Mijn object naar de database is $mysqli.

Nou heb ik nog een class met functies. Die ziet er zo uit:

PHP:
/* Hierin staat het $mysqli object */
include("config.php");

class x
{

public function x()
{
global $mysqli;
}


public function y()
{
global $mysqli;
}


}

Ik moet dus in elke functie opnieuw wijzen naar de globale variabele $mysqli. Is daar een kortere notatie voor?


Alvast bedankt, Jori.
 
Nee, en globals gebruiken is ook nog eens een slechte manier van programmeren. Wat je veel beter kunt doen is die verbinding meegeven in de constructor:

PHP:
class X {
  public function __construct( $database ) {
    $this->database = $database;
  }
}

Dan kun je in de class verwijzen naar $this->database om je verbinding aan te spreken.

Je kunt het zelfs nog wat makkelijker maken als je extend:

PHP:
class Database {
  public function __construct( $database ) {
    $this->database = $database;
  }
}

class X extends Database {
  // deze heeft nu automatisch ook de constructor van bovenstaande class
}
 
Hmm, interessant.

Maar ik heb nog twee vragen.

1 - Heb je een bron waar wordt gezet dat globals slecht programmeren is?
2 - En hoe moet ik dat doen als ik ongeveer 50 variabelen heb? Die zowel binnen als buiten de class worden gebruikit?
 
Laatst bewerkt:
Bedankt voor jullie reacties.


Ik heb nu een class geschreven waar alle configuratie in staat. En omdat $mysqli in een aparte file staat, gebruik ik daarvoor een argument. Dus:

PHP:
class x
{
		public function __construct($db)
		{
				$this->db = $db;
				$this->x = "x";
		}
}


class y extends x
{
		/* Inhoud */
}

Is dat beter? :). Mochten jullie je interesseren waarom ik dit wou weten: ik ben bezig met browser spelletje en die heeft een aparte file met variabelen (www.villgrow.nl).

MVG, Jori.


PS. Globale variabelen in C (extern) zijn gewoon goed hoor :P
 
Laatst bewerkt:
Jep, stukken beter. Globale variabelen zijn gevaarlijk en echt iets wat je jezelf af moet leren als je serieus wilt gaan programmeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan