php面試筆記(5)-php基礎知識-自定義函數及內部函數考點

本文是根據慕課網Jason老師的課程進行的PHP面試知識點總結和昇華,如有侵權請聯繫我進行刪除,email:[email protected]

在面試中,考官往往喜歡基礎紮實的面試者,而函數相關的考點,往往是大家容易忽視的一個點,今天冷月就來幫各位小夥伴們梳理一下,在面試中函數相關的注意點。

回顧真題

<?php
/**
 * Created by 冷月小白.
 * 微信公衆號: 學長冷月
 */
$count = 5;
function get_count()
{
    static $count;
    return $count++;
}

echo $count; //輸出5
++$count; // 6
echo "<br />";
echo get_count(); //什麼也不輸出,執行完後靜態$count的值爲1
echo "<br />";
echo get_count(); //輸出1

解析:
在上面這段代碼中第一次執行get_count()時什麼也不輸出因爲$count++是先返回後++。而第二次執行get_count()時輸出1,理由同上不瞭解 $count++和++ $count的小夥伴們,可以學習一下冷月在另一篇博文中介紹的知識《php面試筆記(3)-php基礎知識-運算符》或者關注冷月的微信公衆號:學長冷月。回覆:php面試。冷月將整理好的資料發給您。

本題考查變量的作用域和靜態變量。靜態變量僅在函數作用域內有效,也就是說靜態變量只存活在棧中。但當程序執行離開此作用域時,其值並不會消失。也就是說下次再調用這個函數的時候,該變量的值會保留下來。
使用時只需要在變量前加上關鍵字static,該變量就成爲靜態變量了。

考點分析

函數的參數及參數的引用傳遞
默認情況下,函數參數通過值來傳遞。如果希望允許函數修改它的值,必須通過引用來傳遞參數。關於引用參數傳遞,請學習冷月的另一篇博文《php面試筆記(1)-php基礎知識-變量和引用變量》。

函數的返回值

  • 函數可以通過使用可選的返回語句(return)返回一個值;
  • 可以返回包括數組和對象的任意類型;
  • 返回語句會中止函數執行,將控制權交回函數調用處;
  • 省略 return,返回值爲 NULL,不可有多個返回值;【若想返回多個值,可以返回一個數組,把多個值放到一個數組中】

函數的引用返回
從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時,都使用引用運算符 &。

<?php
/**
 * Created by 冷月小白.
 * 微信公衆號: 學長冷月
 */
function &myFunc()
{
    static $b = 10;
    return $b;
}
$a = myFunc(); // 10
$a = &myFunc(); // 將$a與$b互爲引用(指向的是一個內存空間),此時將$b = 10,賦值給$a
$a = 100; // 修改 $a的值,函數中 $b的值也會發生改變
echo myFunc(); // 100
?>

外部文件的導入

  1. include
    可以放在PHP腳本的任意位置,當PHP腳本執行到include指定引入的文件時,纔將它包含並嘗試執行。當第二次遇到相同文件時,PHP還是會重新解釋一次,include相對於require的執行效率下降很多。
  2. require
    require函數一般放在PHP腳本的最前面,當它在同一個網頁中解釋過一次後,第二次便不會解釋。
  3. include_once、 require_once
    分別與require / include作用相同,不同的是他們在執行到時會先檢查目標內容是不是在之前已經導入過,如果導入過了,那麼便不會再次重複引入其同樣的內容。

系統內置函數

  1. 時間日期函數
    date():對當前日期或時間進行格式化。
    strtotime():把人類可讀的字符串轉換爲 Unix 時間。
    mktime():返回一個日期的 UNIX 時間戳。
    time():返回當前時間戳(推薦)
    microtime():返回當前 Unix 時間戳的微秒數
    date_default_timezone_set():設置默認時區

  2. IP處理函數
    ip2long():IP網絡址協議地址轉換成整數
    long2ip():整數轉換成IP網絡址協議地址

  3. 序列化及反序列化函數
    serialize():用於序列化對象或數組,並返回一個字符串。
    unserialize():反序列化

  4. 字符串處理函數
    implode():把數組元素組合爲一個字符串
    explode():把字符串打散爲數組
    join():把數組元素組合爲一個字符串
    strrev():反轉字符串
    trim():移除字符串兩側的空白字符或其他預定義字符。
    ltrim():移除字符串左側的空白字符或其他預定義字符
    rtrim():移除字符串右側的空白字符或其他預定義字符
    strstr():搜索字符串在另一字符串中是否存在,如果是,返回該字符串及剩餘部分,否則返回 FALSE
    number_format():通過千位分組來格式化數字

一網打盡

我們先來看一段代碼:

<?php
/**
 * Created by 冷月小白.
 * 微信公衆號: 學長冷月
 */

$var1 = 5;
$var2 = 10;

function foo(&$my_var)
{
    global $var1; //使用全局變量 $var1 = 5
    $var1 += 2; //7
    $var2 = 4; //4 局部變量
    $my_var += 3; //8
    return $var2; //4
}
$my_var = 5;
echo foo($my_var); //4
echo $my_var; //8
echo $var1; //7
echo $var2; //10
$bar = 'foo'; //這裏使用可變函數foo
$my_var = 10;
echo $bar($my_var); //4
?>

答案:
本題考查了全局變量和局部變量的知識點,我們先不要看函數,等函數執行時再回過頭來看函數,這樣就可以較好的解決這類問題。

好了,今天和大家的分享就到這裏了,大家一定要勤加練習,早日收穫自己的offer!

歡迎關注我的公衆號:學長冷月,獲得獨家整理的學習資源和日常乾貨推送。
如果您對我的專題內容感興趣,也可以關注我的博客:guoyu7.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章