Page 1 sur 2

Un problème de namespace

Posté : 18 juil. 2009, 16:15
par katagoto
Bonjour à toutes et à tous,

Je suis sur un serveur personnel avec PHP 5.3, j'ai donc voulu
disposer des namespace. Dans cette optique j'ai changé le
maximum de mes classes abstraite, je m'en servait comme les
namespace en C++, non je fais pas de trust. Hier, via notepad++
j'ai donc fais le mise à jour qui convient en a peu près 4 heures.
J'y ai bien re-préciser les portés, à savoir que j'ai donné le nom
absolu, et j'ai le droit à l'erreur suivante :
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4
Pour le code suivant :
<?php
include('include.php');

\Base\footer(array(
    array($lg['base']['titreIndex']),
    ));
\Base\parse('index.html');
?>
J'avais également une erreur à la ligne 2 lorsque je plaçait un \
devant include.
Je ne comprends pas pourquoi il y a ces erreurs sachant que
include.php inclus le namespace Base et que, d'après la
documentation officielle de PHP ce qui suit est légale :

<?php
namespace Foo;

function strlen() {}
const INI_ALL = 3;
class Exception {}

$a = \strlen('hi'); // appel la fonction globale strlen
$b = \INI_ALL; // accès à une constante INI_ALL
$c = new \Exception('error'); // instantie la classe globale Exception
?>
Dites moi d'où viennent ces erreurs, mais j'ai 2.514 \ dans
94 fichiers à modifier, pitié :'(

Par avance merci de votre aide

Posté : 19 juil. 2009, 10:35
par Hywan
Hey :-),

Je n'ai pas compris où était ton problème car tu n'as pas donné de code ou d'exemple significatifs.
Mais tu devrais jeter un oeil sur ce billet de Pascal Martin (en 2 parties) : Namespace, les espaces de nom (partie 1).

Posté : 19 juil. 2009, 12:11
par katagoto
Merci pour ce liens ça m'a permit de comprendre d'où venait
mon erreur. J'ai une autre question maintenant :
Puisque la première instruction doit-être la déclaration d'un
namespace, que mettre comme nom si le premier fichier inclus
contient plusieurs namespace, est-ce que le code suivant est
correcte ? :
namespace;
Par avance merci de votre aide

Posté : 19 juil. 2009, 15:09
par Hywan
Bah essaye :-).

Posté : 19 juil. 2009, 15:34
par katagoto
Bah ça marche pas mieux, j'ai jamais été empiriste :/

Comment résoudre ce problème ?

Par avance merci de votre aide

Posté : 19 juil. 2009, 15:40
par thehawk
peut être : http://blog.pascal-martin.fr/post/php-5 ... es-de-noms ?

je me suis pas encore vraiment intéressé au sujet hormis quelques lectures données par HyWan ^^

Posté : 19 juil. 2009, 16:10
par katagoto
Je dois rater quelque chose, parce que ça marche toujours pas :/

Exemple :
index.php :
<?php
namespace;
\include('include.php');
\Base\test();
include.php :
<?php
namespace Base;
function test()
{
    echo 'Salut le monde !';
}
Erreur :
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 3

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4

Parse error: syntax error, unexpected T_STRING in /var/www/index.php on line 4
J'ai tout essayé, sans \ au début des fonctions, sans namespace...

Par avance merci de votre aide

Posté : 19 juil. 2009, 16:49
par Sékiltoyai
Pourquoi '\' alors que dans le code que tu postes on ne le voit pas ?

Posté : 19 juil. 2009, 17:05
par katagoto
Pourquoi '\' alors que dans le code que tu postes on ne le voit pas ?
Parce que PHPBB c'est mal foutu, cite mon post et tu verra que
ça y est :lol:

Posté : 19 juil. 2009, 17:23
par thehawk
Je dois rater quelque chose, parce que ça marche toujours pas :/

Exemple :
index.php :
<?php
namespace;
\include('include.php');
\Base\test();
include.php :
<?php
namespace Base;
function test()
{
    echo 'Salut le monde !';
}
Erreur :
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 3

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/index.php on line 4

Parse error: syntax error, unexpected T_STRING in /var/www/index.php on line 4
J'ai tout essayé, sans \ au début des fonctions, sans namespace...

Par avance merci de votre aide
Voici le quote , et pourquoi un "" devant l'include et devant Base ?

Posté : 19 juil. 2009, 18:01
par katagoto
ça se voit qu'avant de poster le message, dans le texteaera, bref
Le \ avant Base et include, notez que ça ne marche pas même
sans, c'est pour repréciser qu'il s'agit bien de l'espace nom
globale. Je fais la même chose avec la std en C++, tout le monde
me dit que je peux utiliser use, mais je m'y retrouve mieux
comme ça et ça ne nuit pas aux performances alors bon...

Par avance merci de votre aide

Posté : 20 juil. 2009, 10:59
par Hywan
Rien pigé. Ils sont où tes backslashes ? Remplace les par $$$, on y verra plus clair …

Posté : 20 juil. 2009, 11:47
par katagoto
Ok, tu as raison, on y verra plus claire
include.php :
<?php
namespace Base;
function test()
{
    echo 'Salut le monde !';
}
Les codes suivant sont tous des index.php, où $ = \ et ne
marchent pas car \ ne serait pas un caractère ASCII :
<?php
namespace;
include('include.php');
Base$test();
<?php
namespace;
include('include.php');
$Base$test();
<?php
namespace;
$include('include.php');
$Base$test();
<?php
include('include.php');
Base$test();
<?php
include('include.php');
$Base$test();
<?php
$include('include.php');
$Base$test();
Voilà, je pense que ce n'est pas un bug :/

Par avance merci de votre aide

Posté : 20 juil. 2009, 12:26
par Hywan
Pourquoi déclarer namespace; ?
Pourquoi ne pas utiliser use; ?

Posté : 20 juil. 2009, 14:24
par katagoto
Si je remplace namespace; par use; dans index.php ça ne marche
toujours pas, je ne vois pas ce que tu veux dire...

Éclaire moi de tes ampoules basse consolation, euh, de tes
lanternes

Par avance merci de votre aide