Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.
Estou com uma dúvida: é possível remover uma função (nativa ou não)?
Por exemplos:
1. Estou com problemas em uma aplicação cheia de ereg_replace()'s (função depreciada). Então, de alguma forma, retiro o "valor" desta função e a redeclaro, com as devidas correções.
2. Estou fazendo vários includes em um loop e os arquivos incluídos possuem funções iguais. Eu gostaria que, ao final de um loop, "desdeclarasse" duas determinadas funções.
Isto existe? Há como fazer isso?
Obrigado.
Obrigado pelas respostas.
>
2. Estou fazendo vários includes em um loop
retire o include de dentro do loop, e faça fora.
Infelizmente, não seria possível. O loop lista subdiretórios de um diretório e includa um determinado arquivo, em cada subdiretório.
Para entender melhor, é um gerenciador de módulos de uma aplicação. Estou tentando incluir os arquivos [nomedomodulo].sys.php de dentro de cada subdiretório, e todos eles tem uma função install() e outra uninstall(). Mas vou tentar alterar os nomes das funções para [nomedomodulo]_install() e [nomedomodulo]_uninstall(), aí dará certo.
Tentei um esquema (gambiarra) com substr(), para que faça um eval() no código que termina quando a primeira função é iniciada (com strpos()), mas não ficou muito legal...
Mas valeu, William.
#3
não correto isso que fez.. acho que você mesmo deve ter noção de que não está certo..
há meios de fazer sem ter que dar tanta volta.
trabalhe um pouco melhor a sua lógica
O que sugere então?
Meu diretório "mods/" está assim (módulos de exemplo):
./mods
/module1/
module1.sys.php
module1.php
/module2/
module2.sys.php
module2.php
Conteúdo do arquivo module1.sys.php:
<?php
$app['name'] = "Module 1";
$app['desc'] = "Só um exemplo";
function module1_install() {
// instalação
}
function module1_uninstall() {
// desinstalação
}
Conteúdo do arquivo module2.sys.php:
<?php
$app['name'] = "Module 2";
$app['desc'] = "Só um exemplo";
function module2_install() {
// instalação
}
function module2_uninstall() {
// desinstalação
}
Na área de gerenciamento de módulos, faço assim:
$files = glob($path.'/mods/*');
$files = array_map('basename', $files);
foreach($files as $mod) {
if(file_exists("mods/$mod/$mod.sys.php")) {
include("mods/$mod/$mod.sys.php");
} else {
$app['name'] = $mod;
$app['desc'] = null;
}
$output .= '<div class="row"><p>
<b>'.$app['name'].'</b><br>'.$app['desc'].'
<br>'.url("admin/mod/$mod/en", t("[instalar]")).' | '.url("admin/mod/$mod/dis", t("[desinstalar]")).'
</p></div>';
}
Obs.: A função url() cria links, baseando-se na configuração do sistema (já que alguns servidores não suportam ModRewrite, é possível ativar ou desativar esta função do aplicativo). A função t() é para tradução, e retorna apenas o texto do único parâmetro, ou a tradução do mesmo, se esta for indicada pelo administrador.
Neste caso, o que me indicaria a fazer?
Obrigado.
não.
faça a correção, passando a usar preg_replace() no lugar de todos os seus ereg_replace()
retire o include de dentro do loop, e faça fora.