Hallo

Kan iemand mij zeggen wat ik fout heb gedaan in de volgende code?

define('HOSTNAAM', $_CONFIG['hostnaam']);
define('GEBRUIKERSNAAM', $_CONFIG['gebruikersnaam']);
define('WACHTWOORD', $_CONFIG['wachtwoord']);
define('DATABASE', $_CONFIG['database']);

$database = new Database(HOSTNAAM, GEBRUIKERSNAAM, WACHTWOORD, DATABASE);
$database->connect();
$database->connect($mysqli);

Hierboven pakt hij de variable $mysqli niet terwijl die variable toch duidelijk is aangegeven hieronder na de connect() function...


class Database extends mysqli {
	protected $hostnaam = HOSTNAAM;
	protected $gebruikersnaam = GEBRUIKERSNAAM;
	protected $wachtwoord = WACHTWOORD;
	protected $database = DATABASE;
    
	public function connect() {    
	    $mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
	    if (mysqli_connect_errno()) {
		   printf('Error');
	   }
	    return true;
    	}
	
	function query($query) { 
        	$result = parent::query($query);
		if($this->error) {
			throw new Exception(mysqli_error($this), mysqli_errno($this));
		}
		return $result;
	} 
}


alle hulp is welkom
Die variabele is niet bekend buiten de functie.

[size=xsmall]Toevoeging op 05/01/2017 15:29:10:[/size]

Euh ... wat wil je hier eigenlijk doen?

$database->connect($mysqli);
De MYSQLI variable pakken, hoe maak ik hem dan bekend? want het is een public function. Moet ik dan global of static gebruiken voor mysqli?

[size=xsmall]Toevoeging op 05/01/2017 15:33:34:[/size]

dus zoiets:

public function connect() {   
		static $mysqli;
	     $mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
	     if (mysqli_connect_errno()) {
		    printf('<title>Er is een fout opgetreden</title>
		   		<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
		  		<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
		 		<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
				<div class="container">
					<div class="modal show" id="myModal" role="dialog">
					 <div class="modal-dialog">
						 <div class="modal-content">
							 <div class="modal-header">
								 <h4 class="modal-title">Er is een fout opgetreden</h4>
							 </div>
							 <div class="modal-body">
								 <p>Het lijkt erop dat er een fout is tussen de verbinding met de database. Als u wilt kunt u contact opnemen met het bestuur met de volgende foutcode: <b>'. mysqli_connect_errno().'</b></p>
							 </div>
							 <div class="modal-footer">
								 <a href="'.URL.'"><button id="btn" class="btn btn-default">Probeer het opnieuw</button></a>
							 </div>
						 </div>
						</div>
					</div>
				</div>');
	    }
	    return $mysqli;
    	}


[size=xsmall]Toevoeging op 05/01/2017 15:35:16:[/size]

EDIT:
static moet global zijn
Woow ... wat ben je toch allemaal aan het doen? Html hoort helemaal niet huis in een functie.

>> De MYSQLI variable pakken, hoe maak ik hem dan bekend? want het is een public function. Moet ik dan global of static gebruiken voor mysqli?

Leg eens rustig uit wat je wilt. Stap voor stap, niet in code maar in woorden.
Ik wil dat ik in elke file/class/functions de variable $mysqli kan gebruiken.
Loop je nu niet iets te hard van stapel? Als ik zo kijk heb ik het idee dat je een hoop theorie hebt gemist in de tutorial van phptuts.

En verder is het gebruik van global in de wereld van het OO-design behoorlijk vies. Ikzelf geef ze gewoon mee in de instance waar je de class aanroept.
Waarom zou je dat willen? Dat klinkt namelijk totaal niet logisch.
Bij eens naar de bestaande MySQLi-class van PHP, en speel daar eens mee.
Je zit nu met te weinig ervaring van OO-nu al een eigen class om die van de standaard MySQLi-class te bouwen.
Ik vind het nu best vergezocht... ;-)
Bij mijn index pagina, werkt $mysqli wel. Maar in mijn class bestand lukt dit dan weer niet. Terwijl ik Database class wel heb geextends
class User extends Database


[size=xsmall]Toevoeging op 05/01/2017 15:47:58:[/size]

Ik heb $mysqli nodig voor query's .
Die in een class staan

En hoe moet ik anders $mysqli uit de class halen zonder global $mysqli?

 class User extends Database 

Dus volgens jou is een User een database?
Begrijp je eigenlijk wel wat extend precies doet, en waarvoor je het moet gebruiken?
Het is niet een soort 'include' van een willekeurige class ofzo.
>> Bij mijn index pagina, werkt $mysqli wel. Maar in mijn class bestand lukt dit dan weer niet. Terwijl ik Database class wel heb geextends

>> En hoe moet ik anders $mysqli uit de class halen zonder global $mysqli?

Ik wil niet vervelend doen, maar lees de reactie van Ariën. Je bent op dit moment, met alle respect, als een kip zonder kop zomaar iets aan het doen. Het schiet z'n doel voorbij en je hebt er uiteindelijk alleen jezelf mee. Je leert niet zomaar even OOP door 1 tutorial te lezen. OOP is een gerichte denkwijze die jij overduidelijk nog niet onder de knie hebt. Volg het advies van Ariën op en ga je eerst eens wat beter verdiepen, want anders ga je tegen een hoop moeilijkheden aanlopen. Nogmaals ... goed bedoeld.

Reageren