婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 關于PHP方法參數的那一些事

關于PHP方法參數的那一些事

熱門標簽:ai電話機器人加盟代理 中原區電話機器人價格 OMG地圖標注app 電銷機器人便宜的有嗎 400電話鄭州申請 地圖標注視頻廣告入駐 gps 地圖標注軟件 黔江400電話如何辦理 招標自動語音外呼系統

前言

在所有的編程語言中,方法或者函數,都可以傳遞一些參數進來進行業務邏輯的處理或者計算。這沒什么可說的,但是在PHP中,方法的參數還有許多非常有意思的能力,下面我們就來說說這方面的內容。

引用參數

涉及到值傳遞和引用傳遞的問題。在正常情況下,我們使用值傳遞的時候,變量是進行了拷貝,方法內外的變量不會共享內存。也就是說,在方法體中修改了變量的值,方法外部的變量不會產生變化。而引用傳遞則是傳遞的變量的內存地值。方法內外的變量可以看做是同一個變量,比如:

$a = 1;
function test($arg){
 $arg++;
}
test($a);
echo $a; // 2

為參數加上標識,就表明這個參數是引用傳遞的參數。如果沒有加這個標識,則所有的基本類型參數都會以值的方式進行傳遞。為什么要強調基本類型呢?下面我們用類當參數來測試一下:

class A
{
 public $a = 1;
}
function testA($obj)
{
 $obj->a++;
}

$o = new A();
testA($o);
echo $o->a; // 2

在這個例子中,我們并沒有使用標識來表明參數$obj是引用類型的,但如果傳遞的參數是對象的話,那么它默認就是進行的引用傳遞。如果想讓對象也是值傳遞呢?抱歉,在方法參數中是沒辦法實現的,只能在方法體中使用clone方式對對象參數進行克隆。

class A
{
 public $a = 1;
}
function testA($obj)
{
 $o = clone $obj;
 $o->a++;
}
$o = new A();
testA($o);
echo $o->a; // 1

關于值和引用的問題,可以參考設計模式中原型模式的講解:PHP設計模式之原型模式

默認參數

參數是可以有默認值的,這個我想大家都應該很清楚了。但是在使用的時候也需要注意,那就是默認參數不要放在前面,否則很容易出錯,比如:

function testArgsA($a = 1, $b){
 echo $a+$b;
}

testArgs(); // error

function testArgsB($a = 1, $b = 2){
 echo $a+$b;
}

testArgsB(); // 3

function testArgsC($a, $b = 2){
 echo $a+$b;
}

testArgsC(1); // 3

在復雜的函數或者緊急的業務開發中,很有可能一個不小心就會漏寫參數,這時候testArgsA就會返回錯誤了。當然,這種粗心類的錯誤是我們應該盡量避免的。

當指定默認值的時候,我們應該根據參數的類型進行指定,比如字符串就指定為'',數字就指定為數字類型。當不確定參數是什么類型時,建議使用NULL做為默認參數。

function testArgsD($a = NULL)
{
 if ($a) {
 echo $a;
 }
}

testArgsD(1);
testArgsD('a');

類型聲明

類型聲明是在PHP5之后添加的功能,就像java一樣,參數前面加上參數的類型,比如:

function testAssignA(int $a = 0)
{
 echo $a;
}

testAssignA(1);
testAssignA("a"); // error

如果參數的類型不對,直接就會報錯。在PHP7以前,只支持類、數組和匿名方法的類型聲明。在PHP7之后,支持所有的普通類型,但是這里要注意的是,只支持普通類型的固定寫法。

  • Class/interface name
  • self
  • array
  • callable
  • bool
  • float
  • int
  • string

固定寫法是什么意思呢?

function testAssignB(integer $a = 0) // error
{
 echo $a;
}

也就是說,int只能寫int,不能使用integer,bool也不能使用boolean。只能是上面列出的類型關鍵字。

類型聲明的好處是什么呢?其實就是Java這種靜態語言和PHP這種動態語言之間的差別。動態類型語言的好處就是變量靈活,不用指定類型,方便快速開發迭代。但問題也在于靈活,為了靈活,動態語言往往會在比較或者計算時對變量進行自動類型轉換。如果你對變量類型轉換的理解不清晰的話,很容易就會出現各種類型的BUG。同時,靜態類型的語言一般都會有編譯打包,而動態類型則是在執行時確定變量類型,所以很少會進行編譯打包,相對來說運行效率也就不如Java之類的編譯后語言了。

關于PHP的類型轉換問題,可以參考此前的文章:PHP中的強制類型轉換

Tips一個小技巧,如果聲明了參數類型,是不能傳遞NULL值的,比如:

function testAssignC(string $a = '')
{
 if ($a) {
 echo __FUNCTION__ . ':' . $a;
 }
}

testAssignC(NULL); // TypeError

這時有兩種方式可以解決,一是指定默認值=NULL,二是使用?操作符:

function testAssignD(string $a = NULL)
{
 if ($a == NULL) {
 echo 'null';
 }
}

testAssignD(NULL); // null


function testAssignE(?string $a)
{
 if ($a == NULL) {
 echo 'null';
 }
}
testAssignE(NULL); // null

可變數量參數

php中的方法可以接收可變數量的參數,比如:

function testMultiArgsA($a)
{
 var_dump(func_get_arg(2));
 var_dump(func_get_args());
 var_dump(func_num_args());
 echo $a;
}

testMultiArgsA(1, 2, 3, 4);

我們只定義了一個參數$a,但是傳進去了四個參數,這時我們可以使用三個方法來獲取所有的參數:

  • func_get_arg(int $arg_num),獲取參數列表中的某個指定位置的參數
  • func_get_args(),獲取參數列表
  • func_num_args(),獲取參數數量

此外,php還提供了...操作符,用于將可變長度的參數定義到一個參數變量中,如:

function testMultiArgsB($a, ...$b)
{
 var_dump(func_get_arg(2));
 var_dump(func_get_args());
 var_dump(func_num_args());
 echo $a;
 var_dump($b); // 除$a以外的
}

testMultiArgsB(1, 2, 3, 4);

和參數默認值一樣,有多個參數的情況下,...b也不要放在前面,這樣后面的參數并不會有值,所有的參數都會在b也不要放在前面,這樣后面的參數并不會有值,所有的參數都會在b中。不過PHP默認已經幫我們解決了這個問題,如果...參數后面還有參數的話,會直接報錯。

利用這個操作符,我們還可以很方便的解包一些數組或可迭代的對象給方法參數,例如:

function testMultiArgsC($a, $b){
 echo $a, $b;
}

testMultiArgsC(...[1, 2]);

是不是很有意思,那么我們利用這個特性來合并一個數組會是什么效果呢?

$array1 = [[1],[2],[3]];
$array2 = [4];
$array3 = [[5],[6],[7]];

$result = array_merge(...$array1); // Legal, of course: $result == [1,2,3];
print_r($result);
$result = array_merge($array2, ...$array1); // $result == [4,1,2,3]
print_r($result);
$result = array_merge(...$array1, $array2); // Fatal error: Cannot use positional argument after argument unpacking.
$result = array_merge(...$array1, ...$array3); // Legal! $result == [1,2,3,5,6,7]
print_r($result);

和方法聲明參數時一樣,在外部使用...操作符給方法傳遞參數時,也不能在...后面再有其他參數,所以array_merge(...array1, array1,array2)的操作會報錯。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%9A%84%E9%82%A3%E7%82%B9%E4%BA%8B%E5%84%BF.php

參考文檔:

  • https://www.php.net/manual/zh/functions.arguments.php
  • https://www.php.net/manual/zh/functions.arguments.php#121579

總結

到此這篇關于關于PHP方法參數的文章就介紹到這了,更多相關PHP方法參數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP獲取當前日期和時間及格式化方法參數
  • PHP頁面間參數傳遞的四種方法詳解
  • php獲取url參數方法總結

標簽:日照 哈密 池州 濟源 北京 阿里 那曲 孝感

巨人網絡通訊聲明:本文標題《關于PHP方法參數的那一些事》,本文關鍵詞  關于,PHP,方法,參數,的,那,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于PHP方法參數的那一些事》相關的同類信息!
  • 本頁收集關于關于PHP方法參數的那一些事的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91精品国产乱码| 激情久久五月天| 日本一区二区三区四区| 精品1区2区在线观看| 欧美一区二区精品| 欧美不卡激情三级在线观看| 884aa四虎影成人精品一区| 91精品黄色片免费大全| 日韩三区在线观看| 2019国产精品| 国产精品久久久久国产精品日日| 国产精品免费久久久久| 一区二区三区色| 婷婷激情综合网| 国产一区高清在线| 国产成人鲁色资源国产91色综| 国产传媒欧美日韩成人| 白白色亚洲国产精品| 在线观看一区日韩| 精品人在线二区三区| 国产日韩精品视频一区| 亚洲精品视频一区| 蜜桃免费网站一区二区三区| 国内精品视频一区二区三区八戒 | 2欧美一区二区三区在线观看视频| 日本亚洲一区二区| 国产综合色在线视频区| 91在线国产观看| 777xxx欧美| 成人免费一区二区三区视频| 午夜亚洲国产au精品一区二区| 久久激情五月婷婷| 94-欧美-setu| 91精品国产一区二区三区蜜臀| 久久久久青草大香线综合精品| 亚洲一区在线观看免费| 精品亚洲aⅴ乱码一区二区三区| 成人国产一区二区三区精品| 欧美一级在线免费| 亚洲日本一区二区三区| 国产一区二区精品在线观看| 欧美亚洲一区二区在线| 久久久久99精品国产片| 日韩高清在线电影| 一本久道中文字幕精品亚洲嫩| 亚洲精品在线电影| 一区二区三区四区在线免费观看| 天天综合色天天综合色h| 91在线观看美女| 国产日韩精品久久久| 蜜桃视频一区二区三区在线观看| 在线影院国内精品| 亚洲精品免费视频| 成人教育av在线| 国产偷国产偷精品高清尤物 | 丁香激情综合五月| 麻豆91在线看| 精品1区2区3区| 国产精品白丝在线| 成人亚洲一区二区一| 日韩视频123| 亚洲已满18点击进入久久| 91看片淫黄大片一级| 国产精品网站在线| 国产不卡免费视频| 国产精品天干天干在线综合| 麻豆国产精品官网| 日韩一区二区电影网| 五月天亚洲精品| 欧美精品在欧美一区二区少妇| 日韩一区二区三区电影| 日韩国产一二三区| 制服丝袜中文字幕亚洲| 日本亚洲视频在线| ...xxx性欧美| 成人高清免费观看| 欧美性猛交xxxx黑人交| 欧美高清一级片在线| 亚洲国产精品视频| 欧美日韩的一区二区| 日韩和欧美的一区| 制服丝袜av成人在线看| 久久国产精品99久久久久久老狼 | 欧美日韩日日夜夜| 亚洲综合视频网| 欧美一区二区在线免费观看| 蜜臀av一区二区| 久久久亚洲精品石原莉奈| 国产综合色产在线精品| 久久久91精品国产一区二区三区| 国产夫妻精品视频| 亚洲综合色噜噜狠狠| 91精品国产综合久久久蜜臀图片| 午夜一区二区三区视频| 欧美视频一区在线观看| 久久亚洲一区二区三区明星换脸 | 国产农村妇女毛片精品久久麻豆| 国产91精品露脸国语对白| 成人欧美一区二区三区黑人麻豆| 色综合久久中文字幕综合网| 亚洲成人动漫在线免费观看| 日韩一二三区不卡| www.色综合.com| 婷婷成人激情在线网| 国产喷白浆一区二区三区| 91麻豆产精品久久久久久 | 久久午夜电影网| 99久精品国产| 日本vs亚洲vs韩国一区三区二区| 国产女主播视频一区二区| 精品视频一区 二区 三区| 国产1区2区3区精品美女| 偷拍一区二区三区四区| 国产女同互慰高潮91漫画| 欧美精品在线观看播放| 日本vs亚洲vs韩国一区三区二区 | 中文子幕无线码一区tr| 在线观看一区不卡| 国产一区二区成人久久免费影院| 亚洲精品国产a| 久久久精品蜜桃| 91精品福利在线一区二区三区| www.av精品| 国产成人精品亚洲午夜麻豆| 亚洲成人资源在线| ...av二区三区久久精品| 久久综合色婷婷| 日韩视频在线你懂得| 欧美三级电影网站| 色呦呦日韩精品| 99国产精品久| 成人精品免费看| 国产在线视频一区二区三区| 五月婷婷色综合| 亚洲国产wwwccc36天堂| 中文字幕精品三区| 欧美精品一区二区三区蜜桃| 欧美蜜桃一区二区三区| 91精彩视频在线观看| av资源网一区| 不卡电影一区二区三区| 懂色av一区二区三区免费观看| 蜜臀av国产精品久久久久| 视频一区二区国产| 午夜伦欧美伦电影理论片| 夜夜精品浪潮av一区二区三区| 国产精品欧美一级免费| 欧美激情一区二区三区在线| 久久久精品黄色| 欧美经典一区二区| 国产精品全国免费观看高清| 中文一区二区在线观看| 自拍偷拍国产精品| 一区二区成人在线视频| 亚洲国产成人porn| 蜜臀av一区二区在线观看 | 国产精品色一区二区三区| 久久久99精品免费观看不卡| 国产精品网站导航| 一区二区视频免费在线观看| 亚洲香肠在线观看| 美洲天堂一区二卡三卡四卡视频| 蜜桃精品在线观看| 粉嫩13p一区二区三区| 91麻豆国产福利在线观看| 91国偷自产一区二区三区观看 | 成人av资源在线| 在线精品视频免费播放| 日韩午夜中文字幕| 日本一区二区不卡视频| 亚洲永久免费av| 紧缚捆绑精品一区二区| 成人免费高清在线观看| 欧美在线观看禁18| 精品国产乱码久久久久久浪潮| 国产精品天美传媒| 喷水一区二区三区| 国产毛片精品视频| 在线观看日韩一区| 欧美不卡视频一区| 一区二区三区四区不卡在线| 久久精品99国产精品| 99精品视频一区| 精品国产91亚洲一区二区三区婷婷| 国产视频一区二区三区在线观看| 亚洲精品国产精华液| 国产精品一区二区三区四区| 91国偷自产一区二区开放时间 | 色菇凉天天综合网| 精品国精品自拍自在线| 国产区在线观看成人精品| 国产成人啪午夜精品网站男同| 91精品国产入口在线| 中文字幕av一区二区三区| 日产国产高清一区二区三区| 国产成人在线电影| 日韩三级免费观看| 亚洲精品视频观看| av一二三不卡影片| 欧美变态口味重另类|