Projet

Général

Profil

Actions

Anomalie #4605

fermé

L'Autoloader ne gére pas les Traits.

Ajouté par Guillaume Alouege il y a plus de 7 ans. Mis à jour il y a plus de 7 ans.

Statut:
Intégré
Priorité:
Normal
Assigné à:
Version cible:
Début:
11/03/2014
Echéance:
% réalisé:

100%

Temps estimé:
1.00 h
Version source:
Solution proposée:

Ajouter un test pour le define (cas PHP 5.3)

if (! defined("T_TRAIT")) define("T_TRAIT", 355);

Puis ajouter le test sur le token : méthode ClassHunterForPHP5_3::find()
if ($token[0] === T_INTERFACE || $token[0] === T_CLASS || $token[0] === T_TRAIT) {

Principaux fichiers impactés:
Complexité:
Contrôle:
Thème:
Socle technique
Régression:

Description

Lorsqu'on utilise un trait, nous obtenons l'erreur suivante par exemple :

PHP Fatal error: Trait 'GPersonnels\Family\WF\Demande\Type\RenouvellementPeriodeProbatoire' not found in /var/www/dynacase/lagon/LAGON_GPERSONNELS/Families/DEMANDE_RENOUVELLEMENT_PERIODE_PROBATOIRE_VS_WF_CLASS.php on line 14
PHP Stack trace:
PHP 1. {main}() /var/www/dynacase/lagon/wsh.php:0
PHP 2. include() /var/www/dynacase/lagon/wsh.php:136
PHP 3. ImportDocument->importDocuments() /var/www/dynacase/lagon/API/importDocuments.php:150
PHP 4. ImportDocument->importSingleFile() /var/www/dynacase/lagon/FDL/Class.importDocument.php:132
PHP 5. importDocumentDescription->import() /var/www/dynacase/lagon/FDL/Class.importDocument.php:153
PHP 6. importDocumentDescription->doClass() /var/www/dynacase/lagon/FDL/Class.ImportDescription.php:379
PHP 7. CheckClass->check() /var/www/dynacase/lagon/FDL/Class.ImportDescription.php:1081
PHP 8. CheckClass->checkInherit() /var/www/dynacase/lagon/FDL/CheckClass.php:35
PHP 9. ReflectionClass->__construct() /var/www/dynacase/lagon/FDL/CheckClass.php:85
PHP 10. Dcp\DirectoriesAutoloader->autoload() /var/www/dynacase/lagon/FDL/CheckClass.php:0
PHP 11. Dcp\DirectoriesAutoloader->_loadClass() /var/www/dynacase/lagon/WHAT/classAutoloader.php:362
PHP 12. require_once() /var/www/dynacase/lagon/WHAT/classAutoloader.php:530

Si on modifie la ligne 86 du fichier classAutoloader.php

if ($token[0] === T_INTERFACE || $token[0] === T_CLASS) {

en

if ($token[0] === T_INTERFACE || $token[0] === T_CLASS || $token[0] === T_TRAIT) {

cela fonctionne.


Demandes liées

Copié vers Core - Anomalie #4641: L'Autoloader ne gére pas les Traits.IntégréÉric Brison11/03/2014

Actions

Mis à jour par Matthieu Codron il y a plus de 7 ans

Note: si on veut être compatible avec php 5.3, il faudrait plutôt écrire quelquechose comme

if ($token[0] === T_INTERFACE || $token[0] === T_CLASS || (defined(T_TRAIT) && $token[0] === T_TRAIT)) {

Mis à jour par Marc Claverie il y a plus de 7 ans

  • Tracker changé de Feature à Anomalie
  • Projet changé de Platform à Core
  • Statut changé de Nouveau à À analyser
  • Assigné à mis à Éric Brison
  • Version cible mis à 3.2.14
  • Thème Socle technique ajouté

Mis à jour par Éric Brison il y a plus de 7 ans

  • Statut changé de À analyser à Analysé
  • Temps estimé mis à 1.00 h
  • Solution proposée mis à jour (diff)

Mis à jour par Éric Brison il y a plus de 7 ans

  • Statut changé de Analysé à Intégré
  • % réalisé changé de 0 à 100
  • Temps estimé 1.00 h supprimé

Appliqué par commit dynacase-core|commit:6771e94b55903f7a351a14630784b93b29662843.

Actions

Formats disponibles : Atom PDF