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);