Page 1 sur 1

[résolu] Require_once avant fonctions

Posté : 24 nov. 2011, 01:29
par Castor Gaspard
Bonjour,

Je veux utiliser un fichier functions.php pour rassembler mes requêtes Pdo.

Or, j'ai placé en début de fichier une instruction require_once('/home/...) (qui contient notamment les identifiants à la base de données), avant l'appel aux fonctions : à l'affichage, j'ai obtenu un "invalid source name...".

Or, j'ai fini par découvrir qu'un simple require dans la fonction remédiait au problème.

Mais il me semble stupide d'inclure quinze fois le même fichier ! :(

Comment y remédier ? Intuitivement, je pense à global, mais sans savoir l'utiliser.

Merci. :mrgreen:

Cordialement,

Gaspard

Re: Require_once avant fonctions

Posté : 24 nov. 2011, 10:11
par moogli
yop,

bon au pif tu fais
connection.php
$pdo = new pdo( truc );

autrepage.php
include 'connection.php';
function machin($var) {
$pdo->query($var);
etc etc
}

?

si oui tu a un problème de portée des variables car ce qui est définis dans en dehors de ta fonction ne l'est pas dedans. Hors mis l'utilisation du mot clef globals (beurk ;) ).

une solution serait la mise en place d'un singleton un peu particulier du style
<?php
<?php
class singletonpdo {
	private static $instance;
	private function __construct() {}
	
	public static function getinstance($dsn=null,$user=null,$passwd=null,$option=null) {
		if (is_null($dsn)){
			if (is_null(self::$instance)) {
				throw new Exception('Pas d\'instance de la classe PDO faut indiquer dsn, user et mdp à un moment ou un autre ;) ! ');
			}
			else {
				return self::$instance;
			}
		}
		else {
			if ( !is_null($user)) {
				try {
					self::$instance = new PDO($dsn,$user,$passwd,$option);
				}
				catch (PDOException $e) {
                                    throw new Exception($e->getMessage(),$e->getCode(),$e->getPrevious());
				}
			}
                        return self::$instance;
		}
	}
}

// test
$a = singletonpdo::getinstance('mysql:host=localhost;dbname=test', 'root', '');
$b = $a->query('select version();');
$c = $b->fetch();

var_dump($c);
?>
donne
array(2) {
["version()"]=>
string(6) "5.5.16"
[0]=>
string(6) "5.5.16"
}
array(2) {
["version()"]=>
string(6) "5.5.16"
[0]=>
string(6) "5.5.16"
}
comme ça dans le connection.php tu peux utiliser la version "$a" histoire d'initialiser la chose et d'avoir un objet pdo de pret pour tous ce qui est "général".
et dans les fonctions / classes etc tu utilise la version "$x" :)

@+

Re: Require_once avant fonctions

Posté : 24 nov. 2011, 10:57
par Castor Gaspard
Bonjour,

Mercii Moogli pour cette réponse claire et documentée. :)

Cordialement,

Gaspard