Mi colega y yo hemos encontrado un comportamiento bastante extraño. Nuestros entornos son Ubuntu 11.10, PHP 5.3.6-13ubuntu3.6 con Suhosin-Patch y Windows 7 PHP 5.3.5.Comportamiento de is_callable en '/'
en nuestras máquinas, el siguiente código funciona como cabría esperar:
<?php
function t() { }
var_dump(is_callable('/'));
Con la salida:
bool(false)
En uno de nuestros servidores, CentOS liberar 5,7 (Final), PHP 5.3 0,8, el mismo código produce:
bool(true)
Sin la función t()
, is_callable
funciona según lo esperado. Tenga en cuenta que is_function
se comporta de la misma manera que is_callable
en estas pruebas.
¿Alguien tiene alguna idea de lo que podría estar causando esto?
Editar:
Parece ocurrir sólo cuando una función llamada t
está presente, cualquier otra cosa, como b
, c
etc, y la salida es la esperada.
Editar - prueba con más caracteres:
<?php
function t() { }
foreach(str_split('/[email protected]#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
Emite el siguiente en el servidor:
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)
En nuestro entorno, la salida es el esperado:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
Editar - mo re información sobre el comentario de cbuckley:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();
produce una salida: Call to undefined function /()
Eso es realmente extraño. ¿Es solo para ''/' '? – Hamish
@Hamish He actualizado mi pregunta con la prueba de código 'is_callable' en más caracteres –
¿Qué sucede cuando' '$ v = '/'; $ v(); '? – cmbuckley