« Return type of … should either be compatible » : l’avis PHP 8.1 sur WordPress

Fiche du décodeur d'erreurs, mise à jour le 12 octobre 2026

AvertissementCompatibilité PHP 8
Le message affiché
Deprecated: Return type of Galerie_Collection::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Autres formulations du même message 2
  • PHP Deprecated: Return type of Panier_Session::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
  • Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice

Depuis PHP 8.1, une classe qui reprend une interface de PHP (ArrayAccess, Countable, Iterator, JsonSerializable…) doit annoncer le type de valeur que renvoient ses méthodes. Le code cité ne le fait pas encore. PHP le tolère, mais prévient par un avis de dépréciation (Deprecated) qu’une future version le refusera. Votre site fonctionne normalement : ce message s’adresse au développeur du thème ou de l’extension.

Pourquoi cette erreur apparaît

  • L’extension ou le thème a été écrit avant PHP 8.1 et n’a pas été adapté depuis.
  • Une bibliothèque livrée dans le dossier vendor d’une extension est restée dans une ancienne version, même si l’extension elle-même est récente.
  • Un WordPress resté sur une version ancienne affiche ces avis pour ses propres fichiers, situés dans wp-includes.
  • Le mode débogage est actif sur le site en ligne : sans lui, WordPress ne montre pas les avis Deprecated.

Comment corriger le problème

Identifier qui doit corriger

Le message cite deux méthodes : la première appartient au code fautif, la seconde à l’interface de PHP qu’il reproduit. Le chemin final désigne le dossier : wp-content/plugins/nom pour une extension, wp-content/themes/nom pour un thème, wp-includes pour WordPress lui-même. Un passage par vendor signale une bibliothèque fournie avec cette extension.

Mettre à jour, puis prévenir l’éditeur

Après une sauvegarde, mettez à jour WordPress, le thème et les extensions. Si l’avis concerne wp-includes, la mise à jour de WordPress suffit en général. Pour une extension sans nouvelle version, joignez le message à votre demande auprès de son éditeur : la correction est mécanique pour lui.

Masquer l’avis sans le perdre de vue

En production, réglez WP_DEBUG_DISPLAY sur false : l’avis disparaît des pages, mais WP_DEBUG_LOG continue de l’écrire dans un fichier à consulter de temps en temps. Le code ci-dessous range ce journal dans un dossier logs, à créer au préalable, au-dessus du dossier du site : le debug.log par défaut, dans wp-content, est souvent lisible depuis le web. Repassez WP_DEBUG à false une fois les avis traités.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', dirname( __DIR__ ) . '/logs/wp-debug.log' );

Ne pas redescendre de version de PHP

Revenir à PHP 7.4 ferait taire l’avis, mais cette version ne reçoit plus de correctifs de sécurité. Mieux vaut rester en PHP 8 et faire évoluer le code concerné.

Déclarer le type de retour

Dans votre propre code, ajoutez le type attendu par l’interface, tel qu’il figure dans le message (: mixed, : bool, : int, : void). Si le code doit encore tourner sous PHP 7, l’attribut #[ReturnTypeWillChange], ignoré par PHP 7, fait taire l’avis en attendant.

class Galerie_Collection implements ArrayAccess {

	private $items = array();

	// PHP 8 uniquement : type déclaré
	public function offsetExists( mixed $offset ): bool {
		return isset( $this->items[ $offset ] );
	}

	// Compatible PHP 7 et 8 : attribut temporaire
	#[ReturnTypeWillChange]
	public function offsetGet( $offset ) {
		return $this->items[ $offset ] ?? null;
	}

	// offsetSet() et offsetUnset() sur le même modèle
}

Sauvegardez le site avant les mises à jour, et ne retouchez pas les fichiers d’une extension tierce : sa prochaine version écraserait la modification.

Un autre message d'erreur ? Collez-le dans le décodeur : il le reconnaît et vous oriente vers la bonne fiche.

Ouvrir le décodeur