web-dev-qa-db-fra.com

Qu'est-ce qui provoque l'erreur "Call-Time Pass-Référence a été obsolète?"

Ma compréhension est que les objets in PHP 5.3 sont tous passés par référence, il n'est donc pas nécessaire que l'utilisation de la notation et $ $ n'est pas nécessaire. Mon problème utilise le module Date_Views où je reçois cette erreur.

Deprecated function: Call-time pass-by-reference has been deprecated in
 _registry_check_code() (line 2701 of C:\wamp\www\cruzr\includes\bootstrap.inc).

Les lignes concernées du code sont:

  // $type is either 'interface' or 'class', so we only need the first letter to
  // keep the cache key unique.
  $cache_key = $type[0] . $name;
  if (isset($lookup_cache[$cache_key])) {
    exit;
    if ($lookup_cache[$cache_key]) {
      require_once DRUPAL_ROOT . '/' . $lookup_cache[$cache_key];
    }
    return (bool) $lookup_cache[$cache_key];
  }

Comment tester si une variable est passée par référence? Avec plusieurs classes en cours de chargement, comment puis-je approcher de déboguer ce problème?

3
Adam S

La cause du "Pass-Pass-By-By-Référence a été obsolète dans _registry_check_code ()" est un fichier qui contient une classe en cours de chargement contenant une variable transmise par référence qui n'est pas dans une définition de fonction.

Drupal 7 nécessite PHP 5,2 ou supérieur et PHP 5 transmet toujours toujours des objets dans des fonctions par référence

C'était un bug difficile à trouver car l'activation d'une caractéristique du module Vues de la date est ce qui a déclenché. Cependant, le problème était dans le module de modération de Workbench. Ce que j'ai fait a été défini le point d'arrêt dans le débogueur sur la fonction Drupal_set_Message () puis a ensuite repris la pile d'appels jusqu'à ce que je trouvais la variable incriminée.

Le problème n'était pas exactement dans le module de date, mais n'a jamais été déclenché par le module de date à la ligne 53 de Date_Views_fields.inc.

// If we don't have a filter handler, we don't need to do anything more.
if (!$handler = views_get_handler($table_name, $field_name, 'filter')) {
  continue; 
}

Cela irait itéraler à travers tous les gestionnaires de la vue, y compris workbench_moderatioin_handler_filter_user_can_modérate, qui a passé une variable par référence non dans une définition de fonction, parent :: options_form (et $ formulaire, $ form_state) ;. Le module de modération de Workbench doit simplement être corrigé pour refléter les modifications de code dans PHP 5.3

2
Adam S