phpargs
‘壹’ 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++那样,直接的实现重载。不过可以通过一些方法,间接的实现重载。
使用一个统一的函数来实现重载。该方法要使用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);