Met private, protected en public werkt het namelijk allemaal vanuit een andere class.
Alvast bedankt.
vanuit de andere classes roep je enkel de methods (functies) aan. Probeer je echter de properties (variabelen) van de class te benaderen dan krijg je een foutmelding tenzij je de properties public maakt. Zo ook als je de methods private of protected maakt in plaats van public.
Bedankt, dat klopt.
Ik zou protected methods willen ophalen vanuit de andere class.
DBverbinding::getHost() en de rest heb ik protected gezet.
Dat wil ik dan zo gebruiken maar ik krijg deze fout:
"Fatal error: Call to protected method DBverbinding::getHost() from context 'Unthinking' in i:\think\htdocs\unthinking.php on line 11"
<?php
include_once "DBverbinding.class.php";
class Unthinking{
private $host;
private $database;
private $username;
private $password;
public function __construct(){
$this->host = DBverbinding::getHost();
$this->database = DBverbinding::getDb();
$this->username = DBverbinding::getUser();
$this->password = DBverbinding::getDb();
try{
$this->db = new PDO("mysql:host=". $this->host .";dbname=". $this->database ."",$this->username /*,$this->password */);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
$this->set_error("Fout op regel: ".$e->getLine());
$this->set_error("Foutmelding: ".$e->getFile());
$this->set_error("Fout in bestand: ".$e->getMessage());
}
}
}
Als je goed bezig bent komt je code in een version control system (VCS) te staan.
Wachtwoorden wil je niet in dat VCS hebben staan maar in een configuratie bestand.
Zet a.u.b. wel een dummy config bestand in je VCS.
Je mag helemaal zelf weten of dat config bestand een ini file, een yaml file, xml file, json file of iets dergelijks is.
Verder heb je die info alleen nodig om een connectie op te zetten. Zodra de connectie tot stand is gekomen (of dat mislukt) wil je eigenlijk dat die data nergens meer in PHP te vinden is.
Zet je het in een array? Weg met de array!
Maak je een DatabaseConfig class die het config bestand uit leest? Weg met de instantie zodra je de gegevens niet meer nodig hebt!
PS. dat je geen VCS gebruikt is geen reden om een slechte gewoonte aan te leren.
Okeey,
Ik vind die manieren allemaal geweldig maar niet alle lijken mij echt veilig genoeg als ze
van overal bereikbaar kunnen zijn.
Alles in een array zetten is niet zo moeilijk en de array verwijderen of hergebruiken ook niet.
Op de website van yaml hebben ze het over een hack.
XML lijkt me handiger te gebruiken als er al een verbinding met een database is.
Json jquery is sowieso 90 kB en wil het liefst geen 90 kB dataverkeer gebruiken per inlogpoging.
ini lijkt me nog wel een handige manier.
Bij al deze vraag ik me wel af hoe de gegevens protected ingeladen kunnen worden dus niet buiten het object toegankelijk zijn.
Een slechte gewoonte aanleren is niet zo slecht volgens mij maar op gebied van veiligheid is het niet zo verstandig denk ik.
Ik zie nu inderdaad dat Yaml of xml niets met de veiligheid van elkaar te maken hebben.
In mijn geval lijkt Yaml of xml overbodig omdat ik
gegevens van een centraal punt op zou willen halen om verbinding te maken met MySQL.
Een soort DHCP functie waarbij elke class de gegevens op kan halen om verbinding te maken met MySQL.
Ik vraag me af hoe ik bijvoorbeeld een statische functie zou kunnen gebruiken om daarbij private properties op te kunnen halen.
In ieder geval bedankt.
In simpele taal:
toegang tot de database hergebruiken.
Inderdaad eerder protected dan private. (srry was foutje)
het gaat om dit stukje:
<?php
$this->host = DBverbinding::getHost();
$this->database = DBverbinding::getDb();
$this->username = DBverbinding::getUser();
$this->password = DBverbinding::getDb();
?>
Ik zou gegevens op willen halen maar ook willen hergebruiken.
Als host heb ik nu localhost of 127.0.0.1.
Maar als ik van host 1 naar host 2 ga wil ik niet dat alles gewijzigd moet maar dat er een vast centraal punt is.
Omdat het ip-adres van de mysql-host meestal niet variabel is, heb ik geleerd om static te gaan gebruiken.
[size=xsmall]Toevoeging op 20/01/2015 15:33:19:[/size]
Maar wat is nu precies je vraag dan? Je kunt je database-gegevens toch gewoon ergens in een configuratiebestand zettten? Al je configuratiegegevens stop je in een object, en uit dat object kun je dan de gegevens ophalen.
Je zou ook kunnen gaan werken met een service container (dependency injection) maar ik weet niet of je daar de kennis voor hebt.
Zo'n service container is eigenlijk wat ik bedoelde.
De vraag was dus eigenlijk of het de beste manier is om een service container te gebruiken of een configuratiebestand.
Deze prioriteit hou ik altijd aan: veiligheid->snelheid->makkelijkheid