Função Redeclare (substituir) [fechada]

2

Qual é o melhor método para alterar a função declarada anteriormente para a nova?

por exemplo, já foi declarado:

function smth(){
echo 'aaa';
}

e eu quero que não seja exibido aaa , mas bbb

function smth(){
echo 'bbb';
}

mas quando insiro a nova função ( dentro de functions.php ), recebo a mensagem de erro

(Fatal error: Cannot redeclare **smth()** (previously declared in ... )



UPDATE - Eu encontrei uma solução:

enlace

    
por T.Todua 29.01.2014 / 21:47

3 respostas

3

O PHP não pode redeclarar as funções. Você precisará usar outra abordagem, como filtros ou similares.

    
por Otto 29.01.2014 / 22:07
3

O PHP não permite redeclarar as funções. Se você escrever a função original, existem várias formas de permitir que você escreva uma função mais flexível.

Condicional em argumentos passados e gancho de filtro, é o primeiro que vem à minha mente.

EX. 1:

function smth( $out = 'a' ){
  if ( $out === 'a' ) {
    echo 'aaa';
  } else {
    echo 'bbb';
  }
}

Depois disso, ligue pela primeira vez

smth();

e segunda vez:

smth('b');

EX. 2

function smth(){
  echo apply_filters('my_smth_filter', 'aaa');
}

Depois disso, ligue pela primeira vez

smth();

e segunda vez:

add_filter('my_smth_filter', function() {
  return 'bbb';
});
smth();

Se a função original é não função sua e não fornece nenhum filtro para alterar a saída e você absolutamente precisa alterar o comportamento dessa função, então veja Patchwork , uma biblioteca PHP que permite redefinir funções definidas pelo usuário em tempo de execução. No entanto, use o Patchwork com cuidado e somente se absolutamente for necessário, porque o Patchwork deve ser usado para fins de teste, não em produção.

    
por gmazzap 30.01.2014 / 00:15
1

Eu sugiro usar a abordagem OOP, como:

class SomeClass
{
  public function aa()
  {
     echo 'aa';
  }
}

class SomeOtherClass extends SomeClass
{
   public function aa()
   {
      return 'bb';
   }
}

$a = new SomeClass();
$a->aa(); // outputs aa
$b = new SomeOtherClass();
$b->aa(); // outputs bb
    
por Eriks Klotins 30.01.2014 / 10:43

Tags