成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

搞定PHP面試 - 變量知識點整理

Mertens / 1225人閱讀

摘要:聲明靜態(tài)變量時不能用表達式的結(jié)果對其賦值正確錯誤使用表達式的結(jié)果賦值錯誤使用表達式的結(jié)果賦值靜態(tài)變量與遞歸函數(shù)靜態(tài)變量提供了一種處理遞歸函數(shù)的方法。

一、變量的定義 1. 變量的命名規(guī)則 變量名可以包含字母、數(shù)字、下劃線,不能以數(shù)字開頭。
$Var_1 = "foo"; // 合法
$var1 = "foo"; // 合法
$_var1 = "foo"; // 合法
$Var-1 = "foo"; // 非法,不能包含 -
$1_var = "foo"; // 非法,不能以數(shù)字開頭
在此所說的字母是 a-z,A-Z,以及 ASCII 字符從 127 到 255(0x7f-0xff)。
因此實際上使用中文變量名也是合法的。
甚至使用中文的標(biāo)點符號作為變量名都是合法的。
只是一般都不推薦這樣用。
$姓名 = "foo"; // 合法
$??!?= "foo"; // 合法。
變量名區(qū)分大小寫
$var = "Bob";
$Var = "Joe";
echo "$var, $Var";      // 輸出 "Bob, Joe"
$this 是一個特殊的變量,它不能被賦值
$this = "foo"; // Fatal error: Cannot re-assign $this
2. 變量的賦值
變量的引用賦值與傳值賦值詳情傳送門:變量的引用賦值與傳值賦值
傳值賦值

變量默認(rèn)總是傳值賦值。那也就是說,當(dāng)將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標(biāo)變量。
這意味著,例如,當(dāng)一個變量的值賦予另外一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。

$foo = "Bob";     // 將 "Bob" 賦給 $foo
$bar = $foo;      // 通過 $foo 傳值賦值給 $bar
$bar = "Jack";        // 修改 $bar 變量
echo $foo;          // $foo 的值未改變,依然是 "Bob"
引用賦值

引用賦值,就是新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。
改動新的變量將影響到原始變量,反之亦然。

使用引用賦值,只需要將一個 & 符號加到將要賦值的變量前(源變量)

$foo = "Bob";        // 將 "Bob" 賦給 $foo
$bar = &$foo;     // 通過 $bar 引用 $foo
$bar = "Jack";     // 修改 $bar 變量
echo $foo;           // $foo 的值也被修改為 "Jack"
只有有名字的變量才可以引用賦值
$foo = 25;
$bar = &$foo;      // 合法的賦值
$bar = &(24 * 7);  // 非法; 引用沒有名字的表達式

function test()
{
   return 25;
}

$bar = &test();    // 非法
3.變量的初始化

雖然在 PHP 中并不需要初始化變量,但對變量進行初始化是個好習(xí)慣。

未初始化的變量的默認(rèn)值

未初始化的變量具有其類型的默認(rèn)值。

布爾類型的變量默認(rèn)值是 FALSE

整形和浮點型變量默認(rèn)值是 0

字符串型變量默認(rèn)值是空字符串 ""

數(shù)組變量的默認(rèn)值是空數(shù)組 array()

4. 可變變量

可變變量是指變量的變量名可以動態(tài)的設(shè)置和使用。

一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。在下面的例子中 hello 使用了兩個美元符號($)以后,就可以作為一個可變變量的變量了。

$a = "hello";

$$a = "world";

這時,兩個變量都被定義了:$a 的內(nèi)容是“hello”并且 $hello 的內(nèi)容是“world”。

因此,以下語句:

echo "$a ${$a}";

與以下語句輸出完全相同的結(jié)果:

echo "$a $hello";

它們都會輸出:hello world。

可變變量用于數(shù)組

要將可變變量用于數(shù)組,必須解決一個模棱兩可的問題。
這就是當(dāng)寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變量呢,還是想要 $ $a 作為一個變量并取出該變量中索引為 [1] 的值。
解決此問題的語法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]

可變變量用于類

類的屬性也可以通過可變屬性名來訪問。可變屬性名將在該調(diào)用所處的范圍內(nèi)被解析。
例如,對于 $foo->$bar 表達式,則會在本地范圍來解析 $bar 并且其值將被用于 $foo 的屬性名。
對于 $bar 是數(shù)組單元時也是一樣。

也可使用花括號{}來給屬性名清晰定界。
最有用是在屬性位于數(shù)組中,或者屬性名包含有多個部分或者屬性名包含有非法字符時(例如來自 json_decode()SimpleXML)。

將一個json格式的字符串轉(zhuǎn)換成php對象:

$string = "{"os-version":"10.3.1","1day":24}";
$obj = json_decode($string);
print_r($obj);

輸出結(jié)果:

stdClass Object
(
    [os-version] => 10.3.1
    [1day] => 24
)

此時若想訪問對象$obj 中的 os-version屬性或1day屬性,若直接使用 $obj->os-version$obj->1day 訪問的話一定會報錯。

正確的訪問方式:

echo $obj->{"os-version"};
echo "
"; echo $obj->{"1day"};

輸出結(jié)果:

10.3.1
24
二、變量的作用域和靜態(tài)變量 1. 變量的作用域

變量的作用域也稱變量的范圍,即它定義的上下文背景(也就是它的生效范圍)。
php變量的范圍跨度同樣包含了include和require引入的文件。

局部變量

在用戶自定義函數(shù)中,將引入一個局部函數(shù)范圍。任何用于函數(shù)內(nèi)部的變量的作用域都將被限制在局部函數(shù)范圍內(nèi)。例如:

$outer = "str"; /* 全局范圍 */

function myfunc()
{
    echo $outer; /* 對局部范圍變量的引用 */
}

myfunc();

這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變量 $outer,而且在這個范圍內(nèi),它并沒有被賦值。

全局變量

global關(guān)鍵字

$outer = "str"; // 全局

function myfunc()
{
    global $outer;
    echo $outer; // 局部
}
myfunc();

這個腳本會輸出 str。在函數(shù)中使用global關(guān)鍵字聲明了全局變量 $a$b 之后,對任一變量的所有引用都會指向其全局版本。對于一個函數(shù)能夠聲明的全局變量的最大個數(shù),PHP 沒有限制。

$GLOBALS超全局?jǐn)?shù)組

$GLOBALS — 引用全局作用域中可用的全部變量

$outer = "str"; // 全局

function myfunc()
{
    echo $GLOBALS["outer"];
}
myfunc();

這個腳本會輸出 str。$GLOBALS 是一個關(guān)聯(lián)數(shù)組,每一個變量為一個元素,鍵名對應(yīng)變量名,值對應(yīng)變量的內(nèi)容。$GLOBALS 之所以在全局范圍內(nèi)存在,是因為 $GLOBALS 是一個超全局變量。

超全局變量

PHP 中的許多預(yù)定義變量都是“超全局的”,這意味著它們在一個腳本的全部作用域中都可用。在函數(shù)或方法中無需執(zhí)行 global $variable; 就可以訪問它們。

這些超全局變量是:

$GLOBALS — 超全局變量是在全部作用域中始終可用的內(nèi)置變量
$_SERVER — 服務(wù)器和執(zhí)行環(huán)境信息
$_GET — HTTP GET 變量
$_POST — HTTP POST 變量
$_FILES — HTTP 文件上傳變量
$_COOKIE — HTTP Cookies
$_SESSION — Session 變量
$_REQUEST — HTTP Request 變量。默認(rèn)情況下包含了 $_GET,$_POST$_COOKIE 的數(shù)組。
$_ENV — 環(huán)境變量

2. 靜態(tài)變量

變量范圍的另一個重要特性是靜態(tài)變量(static variable)。
靜態(tài)變量僅在局部函數(shù)域中存在,但當(dāng)程序執(zhí)行離開此作用域時,其值并不會消失。

靜態(tài)變量的特點

1.使用static關(guān)鍵字修飾
2.靜態(tài)聲明是在編譯時解析的
3.僅初始化一次
4.初始化時需要賦值
5.每次執(zhí)行函數(shù)該值會保留
6.static修飾的變量是局部的,僅在函數(shù)內(nèi)部有效
7.可以記錄函數(shù)的調(diào)用次數(shù),從而可以在某些條件下終止遞歸。

function myFunc()
{
    static $a = 1;
    echo $a++;
}
myFunc(); // 1
myFunc(); // 2
myFunc(); // 3

變量 $a 僅在第一次調(diào)用 myFunc() 函數(shù)時被初始化,之后每次調(diào)用 myFunc() 函數(shù)都會輸出 $a 的值并加1。

聲明靜態(tài)變量時不能用表達式的結(jié)果對其賦值
function foo(){
    static $int = 0;        // 正確
    static $int = 1+2;       // 錯誤  (使用表達式的結(jié)果賦值)
    static $int = sqrt(121);      // 錯誤  (使用表達式的結(jié)果賦值)

    echo $int++;
}
靜態(tài)變量與遞歸函數(shù)

靜態(tài)變量提供了一種處理遞歸函數(shù)的方法。
遞歸函數(shù)是一種調(diào)用自己的函數(shù)。寫遞歸函數(shù)時要小心,因為可能會無窮遞歸下去。必須確保有充分的方法來中止遞歸。
以下這個簡單的函數(shù)遞歸計數(shù)到 10,使用靜態(tài)變量 $count 來判斷何時停止:

function test()
{
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        test();
    }
    $count--;
}
3. 實例分析

寫出如下程序的輸出結(jié)果

$count = 5;
function get_count()
{
    static $count;
    return $count++;
}

echo $count;
++$count;

echo get_count();
echo get_count();
第8行 echo $count; 輸出 5 第9行 ++$count;,此時 $count 的值為 6 第11行 echo get_count();,第一次調(diào)用 get_count() 函數(shù)
function get_count()
{
    // 聲明靜態(tài)變量 $count,由于為賦值,所以其值為 NULL
    static $count;
    // $count++,先返回 $count 的值,后自增。因此,返回值為 NULL。
    // NULL 自增后的值為 1,因此,自增后的 $count = 1
    return $count++;
}

第一次調(diào)用 get_count() 的返回值為 NULL,而 echo NULL; 什么都不會輸出。

第12行 echo get_count();,第二次調(diào)用 get_count() 函數(shù)
function get_count()
{
    // 第二次調(diào)用時,該行不會執(zhí)行
    static $count;
    // 此前 $count = 1,$count++,先返回 $count 的值,后自增。因此,返回值為 1。
    return $count++;
}

第一次調(diào)用 get_count() 的返回值為 1,而 echo get_count(); 輸出 1

整個程序的輸出結(jié)果為 51

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29406.html

相關(guān)文章

  • 搞定PHP面試 - 函數(shù)識點整理

    摘要:使用中文函數(shù)名和變量名面積長寬長寬面積合法,輸出中文符號函數(shù)名。類型聲明類型聲明允許函數(shù)在調(diào)用時要求參數(shù)為特定類型。需要使用自己的包裝函數(shù)來將這些結(jié)構(gòu)用作可變函數(shù)。匿名函數(shù)目前是通過類來實現(xiàn)的。 一、函數(shù)的定義 1. 函數(shù)的命名規(guī)則 函數(shù)名可以包含字母、數(shù)字、下劃線,不能以數(shù)字開頭。 function Func_1(){ } //合法 function func1(){ } //合法 ...

    SimpleTriangle 評論0 收藏0
  • 搞定PHP面試 - 運算符識點整理

    摘要:除法運算符總是返回浮點數(shù)。取模運算符的結(jié)果和被除數(shù)的符號正負號相同。使用位運算符時要特別注意優(yōu)先級。太空船運算符組合比較符當(dāng)小于等于大于時分別返回一個小于等于大于的值。遞增遞減運算符不影響布爾值。 一、算術(shù)運算符 1. 概覽 例子 名稱 結(jié)果 $a + $b 加法 $a 和 $b 的和。 $a - $b 減法 $a 和 $b 的差。 $a * $b 乘法 $a 和 ...

    HelKyle 評論0 收藏0
  • 搞定PHP面試 - MySQL基礎(chǔ)識點整理 - 存儲引擎

    摘要:支持崩潰后的安全恢復(fù)。的使用場景更新密集的表存儲引擎特別適合處理多重并發(fā)的更新請求。外鍵約束支持外鍵的存儲引擎只有。引擎是及之前版本的默認(rèn)存儲引擎。文件存儲表的索引。引擎存儲引擎是引擎的變種。 MySQL基礎(chǔ)知識點整理 - 存儲引擎 0. 查看 MySQL 支持的存儲引擎 可以在 mysql 客戶端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

    whatsns 評論0 收藏0
  • 搞定PHP面試 - PHP魔術(shù)方法識點整理

    摘要:魔術(shù)方法知識點整理代碼使用語法編寫一構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)具有構(gòu)造函數(shù)的類會在每次創(chuàng)建新對象時先調(diào)用此方法,所以非常適合在使用對象之前做一些初始化工作。在析構(gòu)函數(shù)中調(diào)用將會中止其余關(guān)閉操作的運行。析構(gòu)函數(shù)中拋異常會導(dǎo)致致命錯誤。 PHP魔術(shù)方法知識點整理 代碼使用PHP7.2語法編寫 一、構(gòu)造函數(shù)和析構(gòu)函數(shù) __construct() 構(gòu)造函數(shù) __construct ([ mi...

    付永剛 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<