Vindo do background C ++;)
Como sobrecarregar funções PHP?
Uma definição de função se houver algum argumento e outra se não houver argumentos? É possível em PHP? Ou devo usar if else para verificar se existem parâmetros passados de $ _GET e POST? e relacioná-los?
php
arguments
overloading
Vamsi Krishna B
fonte
fonte
overloading
que está sendo solicitado na pergunta. (Veja a resposta aceite para mais detalhes.)Respostas:
Você não pode sobrecarregar as funções PHP. As assinaturas de função são baseadas apenas em seus nomes e não incluem listas de argumentos; portanto, você não pode ter duas funções com o mesmo nome. A sobrecarga do método de classe é diferente no PHP e em muitas outras linguagens. O PHP usa a mesma palavra, mas descreve um padrão diferente.
Você pode, no entanto, declarar uma função variável que recebe um número variável de argumentos. Você usaria
func_num_args()
efunc_get_arg()
obteria a aprovação dos argumentos e os usaria normalmente.Por exemplo:
fonte
myFunc(/*...*/)
.O PHP não suporta a sobrecarga de métodos tradicionais; no entanto, uma maneira de conseguir o que deseja é fazer uso do
__call
método mágico:fonte
__call()
antes. Muito criativo (se um pouco detalhado)! +1Para sobrecarregar uma função, basta passar o parâmetro como nulo por padrão,
fonte
overload
uma função - no entanto, você faz uma observação útil que os leitores devem estar cientes.Pode ser um hack para alguns, mas aprendi dessa maneira como o Cakephp faz algumas funções e o adaptei porque gosto da flexibilidade que ele cria
A idéia é que você tenha diferentes tipos de argumentos, matrizes, objetos, etc., em seguida, detecte o que foi passado e vá a partir daí
fonte
fonte
Que tal isso:
fonte
No PHP 5.6, você pode usar o operador splat
...
como o último parâmetro e eliminarfunc_get_args()
efunc_num_args()
:Você pode usá-lo para descompactar argumentos também:
É equivalente a:
fonte
fonte
O PHP não suporta sobrecarga por enquanto. Espero que isso seja implementado em outras versões, como outras linguagens de programação.
Confira esta biblioteca. Isso permitirá que você use a Sobrecarga do PHP em termos de fechamento. https://github.com/Sahil-Gulati/Overloading
fonte
Infelizmente, não há sobrecarga no PHP, como é feito em C #. Mas eu tenho um pequeno truque. Declaro argumentos com valores nulos padrão e os verifico em uma função. Dessa forma, minha função pode fazer coisas diferentes, dependendo dos argumentos. Abaixo está um exemplo simples:
fonte