PHP函数重载
来自 C++ 背景;)
如何重载 PHP 函数?
如果有参数则定义一个函数,如果没有参数则定义另一个函数? PHP 中可以吗?或者我应该使用 if else 来检查是否有从 $_GET 和 POST 传递的任何参数?并将它们联系起来?
Coming from C++ background ;)
How can I overload PHP functions?
One function definition if there are any arguments, and another if there are no arguments?
Is it possible in PHP? Or should I use if else to check if there are any parameters passed from $_GET and POST?? and relate them?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
您不能重载 PHP 函数。函数签名仅基于其名称,不包括参数列表,因此不能有两个同名的函数。 PHP 中的类方法重载 与许多其他语言不同。 PHP 使用相同的词,但描述了不同的模式。
但是,您可以声明一个接受可变数量参数的可变参数函数。您可以使用
func_num_args()
和func_get_arg()
获取参数已通过,并正常使用它们。例如:
You cannot overload PHP functions. Function signatures are based only on their names and do not include argument lists, so you cannot have two functions with the same name. Class method overloading is different in PHP than in many other languages. PHP uses the same word but it describes a different pattern.
You can, however, declare a variadic function that takes in a variable number of arguments. You would use
func_num_args()
andfunc_get_arg()
to get the arguments passed, and use them normally.For example:
PHP 不支持传统的方法重载,但是您可能能够实现您想要的效果的一种方法是使用 __call 魔术方法:
PHP doesn't support traditional method overloading, however one way you might be able to achieve what you want, would be to make use of the
__call
magic method:要重载函数,只需默认将参数传递为 null,
To over load a function simply do pass parameter as null by default,
这对某些人来说可能有点骇人听闻,但我从 Cakephp 如何执行某些功能中学到了这种方式,并对其进行了调整,因为我喜欢它所创建的灵活性
这个想法是你有不同类型的参数、数组、对象等,然后你检测你是什么通过并从那里走
It may be hackish to some, but I learned this way from how Cakephp does some functions and have adapted it because I like the flexibility it creates
The idea is you have different type of arguments, arrays, objects etc, then you detect what you were passed and go from there
在 PHP 5.6 中,您可以使用 splat 运算符
...
作为最后一个参数,并取消func_get_args()
和func_num_args()
:您可以使用它来解压参数也是:
相当于:
In PHP 5.6 you can use the splat operator
...
as the last parameter and do away withfunc_get_args()
andfunc_num_args()
:You can use it to unpack arguments as well:
Is equivalent to:
这个怎么样:
What about this:
遗憾的是,PHP 中没有像 C# 那样的重载。但我有一个小技巧。我使用默认空值声明参数并在函数中检查它们。这样我的函数就可以根据参数做不同的事情。下面是一个简单的例子:
Sadly there is no overload in PHP as it is done in C#. But i have a little trick. I declare arguments with default null values and check them in a function. That way my function can do different things depending on arguments. Below is simple example: