require_once dans une class

Eléphanteau du PHP | 43 Messages

06 oct. 2005, 19:25

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';
?>
Modifié en dernier par sideb le 14 oct. 2005, 17:52, modifié 2 fois.

Invité
Invité n'ayant pas de compte PHPfrance

06 oct. 2005, 23:29

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');

Eléphant du PHP | 70 Messages

07 oct. 2005, 02:14

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.

Eléphanteau du PHP | 43 Messages

07 oct. 2005, 21:13

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.