namespace et spl_autoload

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : namespace et spl_autoload

Re: namespace et spl_autoload

par stealth35 » 04 juin 2010, 14:03

yeah, bug corriger .... => http://svn.php.net/viewvc/?view=revisio ... ion=300176 ça c'est rapide!
bon cool :mrgreen: , en espérant que ca soit mis pour la prochaine build

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 19:21

je sais mais si tu arrive a le faire fonctionner bravo ...
sur ce je termine mon bug report ...

---------------------
http://bugs.php.net/bug.php?id=51991

edit, pour ceux que cela intéresserait : ceci fonctionne :

Code : Tout sélectionner

//http://groups.google.com/group/php-standards/web/psr-0-final-proposal function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strripos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; } spl_autoload_register('autoload');
-------------
yeah, bug corriger .... => http://svn.php.net/viewvc/?view=revisio ... ion=300176 ça c'est rapide!

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 19:00

bon ben je sens que je vais aller faire un rapport de bug ...
http://www.php.net/manual/fr/function.s ... .php#92767
any configuration :shock:

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 18:58

bon ben je sens que je vais aller faire un rapport de bug ...

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 18:53

marche pas sur le mac non plus :?

je pense que comme tu dis c'est a cause des séparateur si on fait comme ca ca marche (mais c'est naze)
    use My\Framework\Test;
    
    function my_autoload($class)
    {
        $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
        spl_autoload($class);
    }
    
    spl_autoload_register('my_autoload');
       
    $test = new Test();
    echo $test;

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 15:52

oui (donc 2 fichiers : index.php et My/Framework/Test.php).
Mais je commente à chaque fois -> cela me permet de garder les différents test réalisé sous la main
spé, je testerai ce soir je te redirai (sauf si tu trouves avant) :wink:

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 15:48

oui (donc 2 fichiers : index.php et My/Framework/Test.php).
Mais je commente à chaque fois -> cela me permet de garder les différents test réalisé sous la main

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 15:34

t'essayes tout dans un même fichier ? (vus le numéro de ligne des erreurs)

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 15:31

je sais pas puisque que le séparateur de namespace c'est \ ducoup ca prête a confusion, je testerais ce soir sur mon mac pour voir

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 15:28

le premier :
Fatal error: Uncaught exception 'LogicException' with message 'Class My\Framework\Test could not be loaded' in /.../index.php:14 Stack trace: #0 /.../index.php(14): spl_autoload('My\Framework\Te...') #1 {main} thrown in /.../index.php on line 14
Le deuxième :
Fatal error: Uncaught exception 'LogicException' with message 'Class My\Framework\Test could not be loaded' in /.../index.php:21 Stack trace: #0 /.../index.php(12): spl_autoload('My\Framework\Te...') #1 {main} thrown in /.../index.php on line 21
Je me demande si ce ne serait pas simplement du au fait que sous windows le directory_separator est "\" et sous unix "/" => de ce fait sous windows cela chargerait

Donc pour info : linux (ubuntu 10.04 - 64bit) et PHP 5.3.2

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 15:14

bizarre chez moi ca marche

si t'essaye comme ca
use My\Framework\Test;
	
spl_autoload('My\Framework\Test');
    
$test = new Test();
echo $test;
ou comme ca
spl_autoload('My\Framework\Test');
    
$test = new My\Framework\Test();
echo $test;

les 2 marchent chez moi (5.3.2, xp)

avec

-- index.php
-- My
-- -- Framework
-- -- -- Test.php

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 15:08

si je test ton exemple j'obtiens ceci :
Fatal error: spl_autoload() [<a href='function.spl-autoload'>function.spl-autoload</a>]: Class My\Framework\Test could not be loaded in /.../index.php on line 7
Mais si je fait un include de My/Framework/Test.php alros cela passe
Si je supprime le use mais en mettant le include, alors il me remet l'erreur spl (logique car pas dans le même namespace.

=> le namespace fonctionne mais pas l'autoload.
Pourtant partout je lit que l'implémentation par défaut de spl_autolaod est prévue pour supporter les namespace...

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 14:59

pour tester

index.php
use My\Framework\Test;
	
spl_autoload_register();
    
$test = new Test();
echo $test;

My/Framework/Test.php
namespace My\Framework;
	
class Test
{
    public function __toString()
    {
        return 'hi';
    }
}

Re: namespace et spl_autoload

par Grummfy » 03 juin 2010, 14:45

Oui (si j'inclus le fichier manuellement, cela ne pause aucun problème)

je ne sais pas si cela joue, mais je suis sous linux

Re: namespace et spl_autoload

par stealth35 » 03 juin 2010, 13:36

t'as bien mis le namespace dans tes class ?