php - que - Comportamiento de is_callable en ''/''
php is method exist (1)
Como un trabajo alrededor usted podría intentar esto:
$name = ''/'';
$actual = null;
if (is_callable($name, false, $actual) && $name === $actual) {
// Method is actually callable
}
Mi colega y yo nos hemos encontrado con 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.
En nuestras máquinas, el siguiente código se ejecuta como uno esperaría:
<?php
function t() { }
var_dump(is_callable(''/''));
Con la salida:
bool(false)
En uno de nuestros servidores, CentOS versión 5.7 (Final), PHP 5.3.8, el mismo código produce:
bool(true)
Sin la función t()
, is_callable
funciona como se esperaba. Tenga en cuenta que is_function
comporta de la misma forma que is_callable
en estas pruebas.
¿Alguien tiene alguna idea de lo que podría estar causando esto?
Editar :
Parece que solo ocurre cuando una función llamada t
está presente, cualquier otra cosa, como b
, c
, etc., y la salida es la esperada.
Editar - probando con más personajes :
<?php
function t() { }
foreach(str_split(''/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}//|/'"?.>,<'') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
Da salida a lo 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 nuestros entornos, la salida es la esperada:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
Editar - más información sobre el comentario de cbuckley :
<?php
ini_set(''display_errors'', 1);
error_reporting(E_ALL);
function t() { }
$v = ''/''; $v();
Produce salida: Call to undefined function /()