当前位置:首页 » 编程语言 » phpargs

phpargs

发布时间: 2022-06-23 22:49:28

‘壹’ php为什么不支持函数重载啊

php 作为一种弱类型语言,本身不能像强类型如java ,c++那样,直接的实现重载。不过可以通过一些方法,间接的实现重载。
使用一个统一的函数来实现重载。该方法要使用func_get_args()和func_num_args()方法。
<?php

function test1($name){
echo $name;
}

function test2($name,$age){
echo $name.$age;
}

function load(){
//返回输入的元素数目
$num=func_num_args();
//返回输入元素列表的数组形式
$arr=func_get_args();

if($num==1){
test1($arr[0]);
}else {
test2($arr[0],$arr[1]);
}
}

load("a");
echo "<br/>";
load("a","b");
?>

2.当对象试着调用不存在或者受权限限制的方法时,__call()方法会被自动调用,从而可以实现类型重载的效果。该方法是php5新增的方法。
<?php
class A{
//name :调用的方法名字。args:参数列表
function __call($name,$args){
$num=count($args);
if($num==1){
$this->test1($args[0]);
}
else {
$this->test2($args[0],$args[1]);
}
}

function test1($name){
echo $name;
}
function test2($name, $age){
echo $name." ".$age;
}
}

$a=new A();
$a->a("a");
echo "<br/>";
$a->a("a","b");

?>

‘贰’ PHP改变传入参数的值

function add (&$a){
$a++;
}
$a=1;
add($a);
echo $a; // 这里就等于2 至于怎么组合使用你自己看着办

‘叁’ php中,为什么有时候是$this->args,有时候是$this->$args.

$this->args 直接调用类的变量

$this->$args 先获取$args的值,再根据值获取类对应的变一。

比如$args=‘abc’,同最终是$this->abc

相当于另外一种用法 $$abc

‘肆’ php 到底可不可以重载

php 作为一种弱类型语言,本身不能像强类型如java ,c++那样,直接的实现重载。不过可以通过一些方法,间接的实现重载。

  1. 使用一个统一的函数来实现重载。该方法要使用func_get_args()和func_num_args()方法。

<?php

functiontest1($name){
echo$name;
}

functiontest2($name,$age){
echo$name.$age;
}

functionload(){
//返回输入的元素数目
$num=func_num_args();
//返回输入元素列表的数组形式
$arr=func_get_args();

if($num==1){
test1($arr[0]);
}else{
test2($arr[0],$arr[1]);
}
}

load("a");
echo"<br/>";
load("a","b");
?>


2.当对象试着调用不存在或者受权限限制的方法时,__call()方法会被自动调用,从而可以实现类型重载的效果。该方法是php5新增的方法。

<?php
classA{
//name:调用的方法名字。args:参数列表
function__call($name,$args){
$num=count($args);
if($num==1){
$this->test1($args[0]);
}
else{
$this->test2($args[0],$args[1]);
}
}

functiontest1($name){
echo$name;
}
functiontest2($name,$age){
echo$name."".$age;
}
}

$a=newA();
$a->a("a");
echo"<br/>";
$a->a("a","b");

?>

‘伍’ PHP wordpress中如何根据cat分类变量, 给$args加上这个分类的指向url超链接

wordpress里的query_posts返回的是一个数组,是根据传入的参数查询到的文章列表。对于数组,你直接输出(echo)操作肯定是会有问题。


一般的使用方式:你用这个函数执行一次查询,找到你需要的文章(列表),然后遍历这个文章(列表),比如生成一个文章列表。


query_posts($args);//查询
//遍历
while(have_posts()){//如果当前文章列表还有文章
the_post();//取出文章并设置为当前文章对象
echoget_the_title();//输出文章的标题
//其它,比如文章链接、日期等等,都是可以通过函数获取到
}

‘陆’ PHP 函数call_user_func和call_user_func_array用法详解

下面来和大家分享一下这个call_user_func_array和call_user_func函数的用法,另外附赠func_get_args()函数和func_num_args()函数,嘿嘿!!
call_user_func函数是当需要动态调用函数时,才使用的,这个函数有两种用法:
第一种是调用孤独的函数:

代码如下:<?php
function
funa($b,$c)
{

echo
$b;

echo
$c;
}
call_user_func('funa',
"111","222");
call_user_func('funa',
"333","444");
//显示
111
222
333
444
//大家有没有发现,这个用法有点像javascript中的call方法,嘿嘿
?>
第二种是调用类内部的函数:
代码如下:<?php
class
a
{

function
b()

{

$args
=
func_get_args();

$num
=
func_num_args();

print_r($args);

echo
$num;

}
}
call_user_func(array("a",
"b"),"111","222");
?>
上面这个例子,自己运行一下看看结果是什么吧~嘿嘿~提示一下func_get_args()函数是获取传入到函数中的参数,返回一个数组,func_num_args()函数获取传入函数中的参数的个数。

下面再来看看call_user_func_array函数
这个函数也是当需要动态调用函数时用到的,它的用法和call_user_func函数比较像,只是参数传入的是数组。

代码如下:<?php
function
a($b,
$c)
{

echo
$b;

echo
$c;
}
call_user_func_array('a',
array("111",
"222"));
//显示
111
222
?>

call_user_func_array函数也可以调用类内部的方法的
代码如下:<?php
Class
ClassA
{

function
bc($b,
$c)
{

$bc
=
$b
+
$c;

echo
$bc;

}

}
call_user_func_array(array(‘ClassA','bc'),
array(“111″,
“222″));
//显示
333
?>

下面再看一个动态调用函数的例子:
代码如下:<?php
function
otest1
($a)
{

echo(
'一个参数'
);
}

function
otest2
(
$a,
$b)
{

echo(
'二个参数'
);
}

function
otest3
(
$a
,$b,$c)
{

echo(
'三个啦'
);
}

function
otest
(){

$args
=
func_get_args();

$num
=
func_num_args();

call_user_func_array(
'otest'.$num,
$args
);
}
otest("11");
otest("11","22");
otest("11","22","33");
?>

‘柒’ PHP定义一个不固定参数的函数的意义是什么呢能做些什么事情呢

func_get_args是获取方法中参数的数组,返回的是一个数组,与func_num_args搭配使用;
func_num_args一般写在方法中,用于计数;
使用方法如下:
function
foo($a='gg',$b='kk'){
$numargs =
func_num_args();
echo "Number of arguments:
$numargs<br />\n";
if ($numargs >= 2)
{
echo "Second argument is:
" . func_get_arg(1) . "<br />\n";

}
$arg_list = func_get_args();

for ($i = 0; $i < $numargs; $i++)
{
echo "Argument $i is: " .
$arg_list[$i] . "<br />\n";

}
}

foo(1, 2);=》输出内容为:
Number of arguments: 2
Second argument
is: 2
Argument 0 is: 1
Argument 1 is: 2

一般不常用

‘捌’ PHP 递归处理数组,并组合成新的数组

/**
*多维数组递归合并
*/
functionmultimerge(){
$arrs=func_get_args();
$merged=array();
while($arrs){
$array=array_shift($arrs);
if(!$array){
continue;
}
foreach($arrayas$key=>$value){
if(is_string($key)){
if(is_array($value)&&array_key_exists($key,$merged)&&is_array($merged[$key])){
$merged[$key]=call_user_func(__FUNCTION__,$merged[$key],$value);
}else{
$merged[$key]=$value;
}
}else{
$merged[]=$value;
}
}
}
return$merged;
}

$a1=array('user'=>array('name'=>'tony','score'=>23));
$a2=array('user'=>array('name'=>'tony','score'=>255),'name'=>'tom');
$a3=array('user'=>array('name'=>'tony','score'=>288,'test'=>'abc'),'name'=>'jack');
$result=multimerge($a1,$a2,$a3);
var_mp($result);

热点内容
加密卡怎么模拟 发布:2025-03-18 02:02:08 浏览:271
我的世界服务器水桶搭建 发布:2025-03-18 02:01:21 浏览:334
微信存储到sd卡 发布:2025-03-18 01:34:29 浏览:969
eclipse的自动编译 发布:2025-03-18 01:34:29 浏览:368
可以上传视频网站 发布:2025-03-18 01:29:17 浏览:933
mysql密码忘记了怎么 发布:2025-03-18 01:23:00 浏览:859
java与oracle 发布:2025-03-18 01:18:05 浏览:706
怎么给win7电脑文件加密 发布:2025-03-18 01:10:41 浏览:990
python生成随机数 发布:2025-03-18 01:10:40 浏览:96
手机存储卡怎么设置 发布:2025-03-18 01:04:26 浏览:214