Page 1 sur 1

require_once dans une class

Posté : 06 oct. 2005, 19:25
par sideb
Salut,

Le Problème:
J'ai besion de faire des class dans lesquel vont être portée un fichier avec des variables par defaut.
Mon problème c'est qu'à chaques instences de la même page il veut inclure le fichier avec les variables. Avec un require ça me marque pas d'erreur mais à chaque intence il va faire l'inclure.

Deux Questions:
1 - Je voudrais savoir si il y a pas un moyen d'éviter cela, et d'inclure uniquement le fichier que si les variables on subit un changement.

2 - Est-il possible lorsque l'on inclus des variables à partir d'un autre fichier de definir leur droit, de les passer en protected ou private.


Voici une class test que j'ai fait pour essayer de régler mon problème.

-> Fichier avec la déclaration de la class et des instences de test:
<?php
class test {
    
    public $testsansrien;
    public $testavecnull;
    
    public function __construct($testsansrien = '',$testavecnull = 'NULL') {
    
        require_once './tt.conf.php';
    
        echo 'les vars de depart:<br />';
        echo 'testsansrien: '.$this->testsansrien.'<br />';
        echo 'testavecnull: '.$this->testavecnull.'<br /><br />';
        
        $this->testsansrien = $testsansrien;
        $this->testavecnull = $testavecnull;
    
        echo 'les vars ajoute:<br />';
        echo 'testsansrienA: '.$this->testsansrien.'<br />';
        echo 'testavecnullA: '.$this->testavecnull.'<br /><br />';

        $this->testsansrien = $_DEFAUT['testsansrien'];
        $this->testavecnull = $_DEFAUT['testavecnull'];
        
        echo 'les vars DEFAUT:<br />';
        echo 'testsansrienD: '.$this->testsansrien.'<br />';
        echo 'testavecnullD: '.$this->testavecnull.'<br /><br />';
        
        
    }
}
echo 'TEST1:<br />';
$intence1 = new test;

echo '<br />TEST2:<br />';
$intence2 = new test('sansrien','avecnull');
?>
-> Le fichier avec les variables (tt.conf.php):
<?php
//$_DEFAUT = array();
$_DEFAUT['testsansrien'] = 'DEFAULTRIEN';
$_DEFAUT['testavecnull'] = 'DEFAULTNULL';
?>

Posté : 06 oct. 2005, 23:29
par Invité
j'ai pas tout compris.
sinon:
require->inclus toujours le fichier, même s'il est dans une condition
include->inclus seulement le fichier si le "code passe par là.

donc:
//inclus quand même toto.php
if(false) require('toto.php'); 

//toto.php ne sera pas inclus
if(false) include('toto.php');

Posté : 07 oct. 2005, 02:14
par Liquid
Le fichier tt.conf.php contient-il une classe ? Tu développes en PHP 5, tu peux très bien employer une classe avec des membres statiques.

Tu ne devrais utiliser que des classes dans un développement objet donc si tu cherches une "variable par défaut" autant la chercher dans une classe. De plus si tu fais de la sorte, par exemple :
$this->testsansrien = Configuration::getTestSansRien();
... et que le fichier contenant la classe Configuration n'a pas encore été inclus quelque part, PHP 5 recherche la fonction __autoload() dont le corps doit être écrit en fonction de ton arborescence de fichiers. Ça demande entre autres de nommer les fichiers comme les classes. Dans mon exemple Configuration.php.

Posté : 07 oct. 2005, 21:13
par sideb
Le fichier tt.conf.php contient-il une classe ? Tu développes en PHP 5, tu peux très bien employer une classe avec des membres statiques.

Tu ne devrais utiliser que des classes dans un développement objet donc si tu cherches une "variable par défaut" autant la chercher dans une classe. De plus si tu fais de la sorte, par exemple :
$this->testsansrien = Configuration::getTestSansRien();
... et que le fichier contenant la classe Configuration n'a pas encore été inclus quelque part, PHP 5 recherche la fonction __autoload() dont le corps doit être écrit en fonction de ton arborescence de fichiers. Ça demande entre autres de nommer les fichiers comme les classes. Dans mon exemple Configuration.php.
J'y avais pas pensé, je vais tester, merci bceaucoup pour l'information.