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:
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