Les espaces noms : le retour

Mammouth du PHP | 1668 Messages

08 août 2009, 13:53

Bonjour à toutes et à tous,

Voilà, j'ai 3 pages :
index.php :
<?php
include('include.php');

\Base\f1();
\Base\f2();
?>
include.php :
<?php
/*
**      ...
*/
namespace
{
//Pour le temps des scripts
\define('DEBUT', microtime(true));

$cb = (\extension_loaded('zlib'))? 'ob_gzhandler' : NULL;
\ob_start($cb); // tampon

\session_start();//demarage de la session

\date_default_timezone_set('Europe/Paris');

\header('Content-Type: text/html; charset=UTF-8');

// Suppression des slashes dans les superglobales
if(\get_magic_quotes_gpc())
{
        $_GET = \array_map('stripslashes', $_GET);
        $_POST = \array_map('stripslashes', $_POST);
        $_COOKIE = \array_map('stripslashes', $_COOKIE);
}

//------------------------------
// config
//------------------------------
\define('COOKIES', 365);                //jours

\define('D_FORMAT', '%d/%m/%Y %H:%i');//date en général
\define('DEBUG', true); // Si non somme en phase de tests
\define('LIST_MAIL', '...'); // Liste des adresse à mailer en cas de bug
\define('FROM_MAIL', ''); // Adresse de l'expéditeur

// Maintenance
include_once(ABS_DIR.'maintenance.class.php');
\gestion_maintenance\affiche();
}
maintenance.class.php :
<?php

/**
 * Namespace de gestion de la maintenance
 *
 * @author Katagoto
 */

namespace gestion_maintenance;

\session_regenerate_id(true);
// environs une dizaine de fonctions
J'ai le droit à :
Fatal error: Namespace declaration statement has to be the very first statement in the script in .../maintenance.class.php on line 9
J'ai rechercher et je ne comprends rien, car tout commence par des namespace, je suis perdu.
J'avais essayé sans namespace {} dans include.php mais ça ne marchait pas non plus.

D'où vient le problème ?
Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 199 Messages

08 août 2009, 15:09

J'ai déja entendu parler des namespace mais à quoi ca sert exactement?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 août 2009, 15:26

Modération :
Merci de rester dans le sujet. =;

Superpilou, si tu as une question, merci d'ouvrir un nouveau sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
fab
ViPHP | 2657 Messages

08 août 2009, 17:34

Essaye de mettre la déclaration du namespace avant le commentaire
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 1668 Messages

08 août 2009, 19:37

Merci de ta réponse, mais ça ne change rien, hors-mit que l'erreur est à présent à la ligne 2.

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
fab
ViPHP | 2657 Messages

08 août 2009, 19:55

Il faut bien que tu ne laisses AUCUN espace entre <?php et namespace

ainsi tu dois avoir quelque chose comme ci-dessous pour éviter ce type d'erreur :
<?php
namespace katagoto;

?>
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 1668 Messages

08 août 2009, 20:21

Il n'y en a aucun :
<?php
namespace gestion_maintenance;
/**
 * Namespace de gestion de la maintenance
 *
 * @author Katagoto
 */
ça peut venir du fait que mon code est en UTF-8 ?

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
fab
ViPHP | 2657 Messages

08 août 2009, 20:29

possible essaye :
<?php
declare(encoding='UTF-8');
namespace MonProjet;
?>
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 2937 Messages

08 août 2009, 21:00

ça peut venir du fait que mon code est en UTF-8 ?
Ton code est-il édité en UTF-8 avec ou sans BOM ?

Petit nouveau ! | 8 Messages

09 août 2009, 09:48

salut ^^

dans include.php, on trouve :
...
\define('LIST_MAIL', '...'); // Liste des adresse à mailer en cas de bug
\define('FROM_MAIL', ''); // Adresse de l'expéditeur

// Maintenance
include_once(ABS_DIR.'maintenance.class.php');
ce qui équivaut à :
...
\define('LIST_MAIL', '...'); // Liste des adresse à mailer en cas de bug
\define('FROM_MAIL', ''); // Adresse de l'expéditeur

// Maintenance ( inclu )
namespace gestion_maintenance;

\session_regenerate_id(true);
// environs une dizaine de fonctions
et donc la déclaration de l'espace de nom ne se fait pas au début!

Pour info, on peut très bien mettre des commentaires ou des espaces avant un espace de nom, lol, quand même... ce serait abusé sinon.

++

Mammouth du PHP | 1668 Messages

09 août 2009, 11:35

Avec declare() ça ne marche pas, pourtant j'ai essayé de le mettre partout.
Notepad++ me dit UTF-8 en opposition à UFT-8 (sans BOM) donc ça doit être avec BOM
Merci foxdie_cs mais j'y avais pensé, et donc j'ai déclarer le namespace vide, donc principale, c'est censé résoudre ce problème mais bon :/

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
fab
ViPHP | 2657 Messages

09 août 2009, 13:44

Je ne suis pas un expert des namespace mais ce qui me choque aussi c'est que tu essayes de définir un namespace dans un autre ce qui n'a pas grand sens à mes yeux!

Regarde ton maintenance est inclu dans ton premier namespace, qu'est-ce que tu veux obtenir par là?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 2937 Messages

09 août 2009, 15:25

Notepad++ me dit UTF-8 en opposition à UFT-8 (sans BOM) donc ça doit être avec BOM
Dans ce cas, convertis ton fichier en UTF-8 sans BOM.

Mammouth du PHP | 1668 Messages

09 août 2009, 15:54

Je ne suis pas un expert des namespace mais ce qui me choque aussi c'est que tu essayes de définir un namespace dans un autre ce qui n'a pas grand sens à mes yeux!

Regarde ton maintenance est inclu dans ton premier namespace, qu'est-ce que tu veux obtenir par là?
Bah moi je ne voulais plus d'erreur et PHP voulais un namespace avant tout, j'ai essayé d'être conciliant :lol:
Dans ce cas, convertis ton fichier en UTF-8 sans BOM.
ça venait bien de ça, merci ;)
Et ça marche sans namespace {} ni declare()

Merci à tous
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol