51 views

[建议]使用jquery+easyui解释框架项目开发的一个案例——员工管理源代码共享

By | 2019年8月8日

由于php是一种弱类型语言,因此无法确定函数的输入参数类型(可以使用类型提示,但不能在标量类型(如整数和字符串)上使用类型提示),对于函数,例如,只定义了三个输入参数,而php输入了四个r当它运行呼叫时更多。多个参数。因此,基于这两点,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中实例化它。

本文编辑于2019年08月8日,属于云漫网络原创内容,由特约作者(高防服务器从事人员)首发在win-man.com,云漫网络每日更新发布行业原创内容,转载请注明出处。否则属侵权行为一定追究责任。

本文转载于:http://win-man.com
本文关键词:高防服务器,海外服务器,香港服务器
作者:高防服务器从事人员

发表评论

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