43 views

如何快速提高开发效率:PHP经典实战教学之函数重载

By | 2019年3月3日

由于php是一种弱类型语言,因此无法确定函数的输入参数类型(可以使用类型提示,但不能在标量类型(如整数和字符串)上使用类型提示),对于函数,例如,只有三个输入参数被定义,而php在运行调用时输入四个或更多参数。因此,基于这两点,PHP不能重载函数(类似于javascript语言),也不能重载构造函数。

因为函数的重载对于提高开发效率有很大的帮助,如果它可以是C或C++的话,那将是非常好的。事实上,PHP提供了一个神奇的方法,混合调用(字符串名、数组参数)。PHP手册中也提到了这个方法。根据官方文件,该方法可以实现函数重载。当调用对象中不存在的方法时,如果定义了_call()方法,则调用该方法。例如,以下代码:

<?php
class A
{
function __call ( $name, $arguments )
{
echo “__call调用<br/>”;
echo ‘$name为’.$name.”<br/>”;
print_r ($arguments);
}
}
(new A)->test(“test”,”argument”);
?>
运行结果为:

__call调用

$name为test

Array ( [0] => test [1] => argument )

所以只需要使用这种神奇的方法来实现函数重载。

代码如下:

<?php
class A
{
function __call ($name, $args )
{
if($name==’f’)
{
$i=count($args);
if (method_exists($this,$f=’f’.$i)) {
call_user_func_array(array($this,$f),$args);
}
}
}
function f1($a1)
{
echo “1个参数”.$a1.”<br/>”;
}
function f2($a1,$a2)
{
echo “2个参数”.$a1.”,”.$a2.”<br/>”;
}
function f3($a1,$a2,$a3)
{
echo “3个参数”.$a1.”,”.$a2.”,”.$a3.”<br/>”;
}
}
(new A)->f(‘a’);
(new A)->f(‘a’,’b’);
(new A)->f(‘a’,’b’,’c’);
?>
输出如下:

1个参数a
2个参数a,b
3个参数a,b,c

同样,在PHP中,构造函数的重载只能灵活地实现。实现的关键是获取输入参数,并根据输入参数决定调用哪种方法。下面是一个示例代码:
<?php
class A
{
function __construct()
{
echo “执行构造函数<br/>”;
$a = func_get_args(); //获取构造函数中的参数
$i = count($a);
if (method_exists($this,$f=’__construct’.$i)) {
call_user_func_array(array($this,$f),$a);
}
}
function __construct1($a1)
{
echo “1个参数”.$a1.”<br/>”;
}
function __construct2($a1,$a2)
{
echo “2个参数”.$a1.”,”.$a2.”<br/>”;
}
function __construct3($a1,$a2,$a3)
{
echo “3个参数”.$a1.”,”.$a2.”,”.$a3.”<br/>”;
}
}
$o = new A(‘a’);
$o = new A(‘a’,’b’);
$o = new A(‘a’,’b’,’c’);
?>
执行构造函数
1个参数a
执行构造函数
2个参数a,b
执行构造函数
3个参数a,b,c

顺便说一句,像C等面向对象语言一样,不能通过将构造函数设置为私有或受保护来在PHP中实例化它。

本文转载于:http://win-man.com
本文关键词:AnTi云盾 网络劫持 网站加速 棋牌防御
作者:云漫编程咨询

发表评论

电子邮件地址不会被公开。 必填项已用*标注