PHP Conference Nagoya 2025

Recurso de Sobrecarga de Funções

Aviso

Este recurso tornou-se DEFASADO a partir do PHP 7.2.0 e foi REMOVIDO a partir do PHP 8.0.0. O uso deste recurso é fortemente desencorajado.

Você pode frequentemente encontrar dificuldades ao fazer com que uma aplicação PHP existente funcione em um ambiente multibyte específico. Isso acontece porque a maioria das aplicações PHP por aí são escritas com funções de string padrão como substr(), que são conhecidas por não lidar corretamente com strings codificadas em multibyte.

mbstring suporta um recurso de 'sobrecarga de funções' que permite adicionar suporte a multibyte a uma aplicação dessas sem modificar o código, sobrecarregando as contrapartes multibyte das funções de string padrão. Por exemplo, mb_substr() é chamada em vez de substr() se a sobrecarga de funções estiver ativada. Esse recurso facilita a migração de aplicações que suportam apenas codificações de byte único para um ambiente multibyte em muitos casos.

Para usar a sobrecarga de funções, defina mbstring.func_overload no php.ini para um valor positivo que represente uma combinação de máscaras de bits especificando as categorias de funções a serem sobrecarregadas. Deve ser definido como 1 para sobrecarregar a função mail(), 2 para funções de string, 4 para funções de expressão regular. Por exemplo, se for definido como 7, as funções de correio, strings e expressões regulares serão sobrecarregadas. A lista de funções sobrecarregadas é mostrada abaixo.

Funções a serem sobrecarregadas
valor de mbstring.func_overload função original função sobrecarregada
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
2 strtolower() mb_strtolower()
2 strtoupper() mb_strtoupper()
2 stripos() mb_stripos()
2 strripos() mb_strripos()
2 strstr() mb_strstr()
2 stristr() mb_stristr()
2 strrchr() mb_strrchr()
2 substr_count() mb_substr_count()

Nota:

Não é recomendado usar a opção de sobrecarga de funções no contexto por diretório, porque ainda não foi confirmado como sendo estável o suficiente em um ambiente de produção e pode levar a um comportamento indefinido.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
52
Anonymous
8 years ago
it's kinda evil and gives you tons of headache.
up
39
Anonymous
7 years ago
I took over a project with this "feature" enabled... took me a while to figure out why strings behaved non language standard. So, if you like to make grown men cry - by all means enable this deathtrap.
up
17
Grandt
10 years ago
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
up
-2
Oliver Baltz
14 years ago
In case you need to (de)activate the overloading for a specific directory, try setting an appropriate php_admin_value in your httpd.conf, e.g.

<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>

I'm not 100% sure if one can rely on that, but it seems to work for me.
To Top