PHP – OOP – Por que minha function é chamada duas vezes?

Estou enfrentando um problema em que minha function é chamada duas vezes toda vez que eu enviar meu formulário

meu arquivo de formulário com a chamada para a function:

login(); ?> 


minha class e function:

 class login { public function login() { if(isset($_POST['submit'])){ echo "submit"; } } } 

Então, toda vez que eu pressionar o botão enviar, “enviar” é repetido duas vezes. O que significa que minha function é chamada duas vezes. Não entendo o porquê.

Um método denominado o mesmo que a class é considerado um construtor (estilo antigo) e é chamado sempre que o object é criado.

Então, é chamado uma vez que o object é criado, e outra vez quando você o chama explicitamente.

Note que hoje, é considerada uma prática melhor implementar __construct() vez de ClassName() , principalmente para ajudar com a inheritance.


Mais material de leitura:

  • PHP – Construtores e Detonadores
  • PHP – Old Style Constructors

O nome da sua class é o login. Você não possui __construct() , e você possui uma function chamada login() . Então, quando você instancia a class, o login() é chamado primeiro porque você não definiu __construct() , o nome do método mesmo que a class se torna o construtor. Então você está chamando a function login() novamente. Daí é chamado duas vezes.

Quando você cria uma Classe, você deve especificar um Construtor.

Se você não especifica um Construtor, ele é chamado por Magic Methods.

Em seu caso, você cria uma class sem um construtor, com uma function com o mesmo nome da class. Login da class -> Login do método. O PHP Acts como o método de login é seu construtor …

Então, quando você chama $ login = new Login (), você está chamando o construtor que é o método de login.

E quando você chama o método de login, $ login-> login (), você está chamando duas vezes.

Você está entendido?

Você liga uma vez a function com o construtor, repita o tempo manualmente. No PHP 5.3.3, se você nomear a function como a class, é um construtor.

No PHP 4, o construtor de uma class tinha o mesmo nome que a class. Quando em PHP 5 foram adicionados os __construct() esquema de nomeação __construct() foi adicionado, o modo antigo continuou funcionando por razões de compatibilidade.

No seu caso, isso significa que o login() será chamado como construtor e, a partir da chamada explícita