30 votes

Comportement des is_callable sur #39;/#39;

Mon collègue et moi avons rencontré certains plutôt étrange comportements. Nos environnements sont Ubuntu 11.10, PHP 5.3.6-13ubuntu3.6 avec Suhosin-Patch, et Windows 7 PHP 5.3.5.

Sur nos machines, le code suivant s'exécute que l'on attend:

<?php
function t() { }
var_dump(is_callable('/'));

Avec la sortie de:

bool(false)

Sur un de nos serveurs, CentOS version 5.7 (Final), PHP 5.3.8, le même code produit:

bool(true)

Sans l' t() fonction is_callable s'exécute comme prévu. Notez que is_function a le même comportement que is_callable dans ces tests.

Quelqu'un aurait-il une idée de ce que pourrait être la cause?

Edit:

Il semble se produire uniquement lorsque une fonction nommée t est présent, rien d'autre, comme b, c etc, et la sortie est aussi prévue.

Edit - test, avec plus de personnages:

<?php
function t() { }
foreach(str_split('/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
    if (is_callable($character)) var_dump($character, is_callable($character));
}

Les sorties suivantes sur le serveur:

string(1) "/"
bool(true)
string(1) "t"
bool(true)
string(1) "T"
bool(true)
string(1) "_" // gettext
bool(true)
string(1) ":" // With the t() function undefined, this remains callable on the server
bool(true)

Sur notre environnement, la sortie est prévue:

string(1) "t"
bool(true)
string(1) "T"
bool(true)

Edit - plus d'informations sur cbuckley commentaire:

<?php 
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();

Produit de sortie: Call to undefined function /()

0voto

Petah Points 18432

Comme un travail autour de vous pourrait essayer ceci:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X