今天我們主要學了函式的相關知識,是個比較基礎的知識,但也是很重要的。
函式就類似於乙個工具,我們寫好函式之後可以直接進行呼叫,可以很大的減少**的從用性,提高頁面效能和可讀性。
在php中函式的定義方式為:
function name($形參1,$形參2.....)
在上方的函式定義式中,name代表函式名,小括號內是形參,是用來傳遞引數,花括號中的就是呼叫時需要執行的**。
函式的呼叫方式:
name(實參1,實參2,......)
當**讀到name(實參1,實參2,......)時,就會執行上述定義函式中花括號的內容,其中實參就會通過形參傳遞到函式內部,用來參與運算。花括號中如果有return則函式有返回值,返回值為return後跟的值;
當呼叫函式時,如果不進行傳遞引數,可以給形參設定預設值:
function name($x=1,$y=2)
當在呼叫這個函式時,不進行傳參,則函式執行中預設$x=1,$y=2;
值傳遞:預設的方式,如果沒有特別的設定,引數傳值都是值傳遞。
引用傳遞:需要在形參的前面加&符號:
那麼我們來看看以前學過的什麼是值傳遞(拷貝傳值)和引用傳遞:
通常函式呼叫時的實參數量,應該跟函式定義時的形參數量一致,如果函式定義時,形參有預設值,則對應的實參就可以進行一定程度的省略,注意:省略只能從右往左進行。
有一種定義和使用函式的特別形式(並不常見):它不定義形參,而實參任意給出,這種函式系統中也經常見到比如:
ver_dump($v1);
var_dump($v1,$v2,$v3);
我們自己也可以定義這種函式:
在函式內部呼叫系統函式,func_get_args(),所有的實參資料都會放入乙個陣列中:
$arr = func_get_args(); //獲取實參資料列表
func_get_arg($i); // 獲得第$i個實參,$i從零開始
func_num_args(); //獲取是實參的個數
在之前我們學習過可變變數:乙個變數的名字還是乙個變數。
與可變變數一樣,乙個函式的名字也是乙個變數;
匿名函式就是指沒有名字的函式。匿名函式的形式有兩種,
形式1:將乙個匿名函式「賦值」給乙個變數。
$a = function (); //注意:這裡要用分號
$a(); //函式的呼叫。
//匿名引數也可以帶引數,也可有返回值,使用和正常函式差不多。
形式2:將匿名函式當做實參來使用,如下圖:
變數的作用域,就是指:乙個變數在什麼範圍中可以使用的情況。php中作用域有三個分別是區域性作用域,超全域性作用域,全域性作用域;
就是指乙個函式的內部範圍。對應的變數就是區域性變數。
區域性變數會在函式執行結束時候會將變數銷毀,下次呼叫會還是原來的值。不過有個例外,那就是靜態區域性變數,在變數名稱之前新增static,那麼這個變數就不會被銷毀。可以用來比如:
function fn()
舉個例子:
就是指所有的**範圍。對應的變數就是超全域性變數。其實只有系統預定義的幾個:$_get, $_post, $_server, $_request, $globals, $_session, $_cookie, $_files
就是不在函式內部的範圍----函式外部。對應的變數就是全域性變數。
注意:1)通常情況下全域性範圍不能訪問區域性變數。
2)區域性範圍不能訪問全域性變數。
1)我們可以在函式中,使用global關鍵字來宣告乙個要使用的全域性變數的同名區域性變數。
需要注意的是:其實函式內部的$v4是區域性變數,函式外的$v4是全域性變數,兩個變數不同,但是指向是相同的(也就是引用關係)
2)使用$globals超全域性變數,可以認為是全域性變數的另一種使用方式。
但是,如果我們隊$globals變數的某個單元(也就是下標)進行unset,則其就會完全對應銷毀,這是因為$globals對全域性變數的使用可以看做是全域性變數的另一種語法形式而已,而不是引用關係。如圖:
遞迴函式就是乙個函式內部呼叫它自己的函式!
function fn($n)
fn();
從上面的這個函式來看,這個函式是死迴圈,在專案中不能這樣使用,我們需要讓他按照我們的要求停下來。
運用遞迴函式來求n的階乘;
function fn1($n)
$res = $n*fn1($n-1);
}fn1(n);
遞迴思想總結:當面對乙個大問題時,該大問題可以經由該問題的「小一級問題」而經過簡單計算獲得,而且,可以獲知這類問題的「最小一級問題」答案,則此時就可以用遞迴思想來解決。
遞推的思想就是:最小的問題是已經解決,一級一級向上解決,直到解決完問題:
$a = 1;
for($n=2;$n<=5;++$n)
echo $res;
當乙個問題既可以用遞推和遞迴同事能解決問題,我們需要優先選用遞推思想,因為遞迴的思想更消耗資源。
好了,今天的學習就到這裡,我們明天繼續。
前端學習Day7
一.padding的用法 1 padding是長在內容和盒子之間的,在盒子內部。2 padding是為了調整 子元素 在 父元素裡面位置關係。3 padding的特點 padding值會把盒子撐大。4 如果想讓盒子保持原有大小,需要在寬高的基礎上減掉padding值。5 給單一方向設定padding...
丹的Python學習筆記Day7函式
以下筆記參考廖雪峰老師的python教程 1.python內建函式呼叫 如 求絕對值 abs 求最大值 max 資料型別轉換 int 函式名是指向乙個函式物件的引用,把函式名賦給乙個變數相當於給這個函式起別名。2.函式定義 定義乙個函式quadratic a,b,c 接收3個引數,返回一元二次方程的...
機器學習基礎DAY7
第七章 決策樹與隨機森林 決策樹思想的 非常樸素,程式設計中的條件分支結構就是if then結構,最早的決策樹就是利用這類結構分割資料的一種分類學習方法 1.資訊增益 特徵a對訓練資料集d的資訊增益g d,a 定義為集合d的資訊熵h d 與特徵a給定條件下d的資訊條件熵h d a 之差,即公式為 注...