php 入門筆記
一、web服務器原理
瀏覽器:不算開發技術,但是是開發者工具,能幫助我們到服務器去找腳本並進行解析
了解瀏覽器的差異
開發時需要安裝多個瀏覽器測試兼容效果
大致可分為兩大類: IE 和 其他
可以先按照火狐、谷歌等開發,再去修改,兼容IE
將前端代碼放服務器上 web是客戶端的服務
web服務器(想將靜態網頁發布出去就需要web服務器)是一款軟件,有apache、Nginx、Tomcat、IIS等
(其實自己也可以嘗試寫一個web服務器,需要懂http協議等)
動態網站就是人機交互,想搜索就能出現頁面,就需要服務器去處理,在服務器上和web服務器裝在一起的就要有在服務器端工作的腳本語言,
服務器端對服務器的處理,操作系統的結構、服務器的目錄結構、數據庫中的數據結構,文件數據,用戶通過訪問web服務器,web服務器結合服務器的編程語言
什麽都能做到。
服務器端編程語言 php,jsp,asp等中的一種
數據庫管理系統 MySQl、Oracle、SQL Server 等中的一種
基於數據庫的網站才是動態網站 得會一到幾種數據庫管理軟件
了解工作中的業務和工作流程以及一些算法。
web工作原理:(BS結構)
服務器上要有操作系統
操作系統中要安裝一個web服務器,web服務器會開一個端口(一般是80端口)
http://www.baidu.com 配置網絡時一定要配置DNS,可將輸入的域名翻譯為地址
url組成:
1、協議:http 傳輸協議 (不寫的話,瀏覽器會自動添加上)協議有一些缺省的東西,不寫會自動補全
2、主機:ip 或 域名 (如www.baidu.com)
3、端口:80(web服務器默認端口)通過端口區分訪問的是哪個軟件,普通端口是1024-65535之間的整數
常用協議端口是0-1024之間的整數
apache服務器:通過它可以訪問 文檔根目錄 root ,
4、內容:php/index.php
5、參數:?page=10
通過在瀏覽器輸入url(訪問html的url),向web服務器發送請求,服務器返回相應的html文件給瀏覽器,瀏覽器對文件進行解析渲染
web服務器沒有解析語言的功能,但是瀏覽器只能解析html文件,所以需要在web服務器中擴展語言解析器
如需要解析php,就要裝php解析器。php在服務器端解析,所以是服務器腳本語言,html在瀏覽器即客戶端解析
所以是客戶端腳本語言
服務器端還要安裝數據庫
語言本身沒有大量存儲的功能,所以需要在服務器端安裝數據庫
數據庫:MySQL Oracle SQL server
php可以作為訪問數據庫的客戶端連接數據庫 數據庫和web服務器不一定要安裝在一臺服務器上
二、幾種主流的web應用程序平臺
開發準備:操作系統 web服務器 數據庫 腳本語言
微軟系列: window IIS SQL server Asp(C#) Asp.net
Linux Apache(發布網站的) MySQL php 簡稱LAMP(最合適)
Unix tomcat Oracle Jsp JavaEE平臺組合
(性能好,針對特定機器寫的,不會死機,很穩定,不跨平臺不跨機器)
三、LAMP 網站開發組合
可以嘗試去學習一下Linux操作系統
PHP 的學習
一、php的運行環境
Linux下的安裝三種方式
源碼包安裝
rpm包安裝
集成軟件安裝
xampp
集成軟件安裝 xampp (只建議學習使用,因為apache,mySql版本不能直接單獨選擇)
Windows 安裝的兩種方式
單個下載安裝
集成環境安裝
php版本,5.3.1、、、
集成軟件有 appserv、phpstydy 、wampserver(推薦使用的)
二、安裝php的運行環境
環境結構
啟動、停止、重啟
各個軟件的“家目錄”
各個軟件的配置文件
其他一些結構
三、php基礎
1、php功能介紹
PHP 超級文本預處理器
-服務器端腳本語言運行 (主要的方向 開發動態網站)
-命令行腳本運行
-客戶端圖形界面(GUI)程序
phpinfo();打印所有php的環境信息以及模塊信息,不光可測試環境是否安裝失敗
Loaded Configuration File 配置文件的位置
PHP在web開發中的應用(既可以做網站也可以做應用軟件)
1)php是一種在服務器端執行的嵌入HTML文檔的腳本語言
2)php是目前最流行的網站開發語言(B/S結構)
3)php獨特的語法混合了C、Java、Perl 以及php 自創新的語法
支持幾乎所有流行的數據以及操作系統
php特點:
1)是開方源代碼的,服務器端的腳本語言
2)獨立於操作系統,可以運行在幾乎所有系統中
3)支持大部分的服務器
4)支持大量數據庫
5)可以創建圖象
6)還有一些其他功能在後面的高級技術詳細介紹
php的發展
互聯網相關企業幾乎都在用php語言進行網站開發
四、第一個php程序,PHP語言標記及指令分隔符“分號”
php的開發步驟:
1)使用編輯器創建一個包含源代碼的磁盤文件
2)將文件上傳到web服務器上
3)通過瀏覽器訪問web服務器運行程序
php的基本語法:
四種可以讓php解析的標簽
<?php
echo "我們交個朋友<br>";
?>
<?
echo "不行<br>"; (這種可能會跟xml發生沖突)
?>
<%
echo "hello<br>";
%>
<script language="php">嗨<br></script>
五、PHP程序註釋及空白的使用
指令分割符 分號""
//功能執行語句,後面必須加分號
echo "aaaaaaaaaaaaaa";
//結構定義語句,後面一定不要加分號
if(true){
}
while(){
}
class demo{}
function demo(){
}
PHP需要在每個指令後用分號結束。和其他語言不一樣的是,在php中括號(?>)
前的分號不是必選的
程序註釋*******
//......單行註釋
/*.......*/多行註釋 (註意不能嵌套)
#..... 腳本註釋
/**.....*/文檔註釋 (也不能嵌套)
程序員在編輯時使用註釋是一種良好的習慣,優點:
寫過不合適的代碼註釋
寫幫助文檔
調試程序
註意:註釋要寫在代碼的上面或是右邊
程序中使用空白的處理
六、php變量在計算機內存中的存儲
1、變量的聲明 (想用數據先放到變量裏面)
變量是用於臨時存儲值的容器。這些值可以是數字、文本、或者復雜得多的排列組合。是用於跟蹤幾乎所有類型信息的簡單工具
php是一種非常弱的類型語言,php變量的類型不是由程序員設定的,確切的說,是根據該變量使用的上下文在運行時決定的。php不要求在使用
變量之前聲明變量,當第一次給一個變量賦值時,你才創建了這個變量
內存劃分:棧內存 變量名 地址
2、變量的聲明及變量的命名
1)變量名予以 $開始
2)變量的名稱聲明時一定要有意義
3)不合法的變量名:不能以數字開頭,不能有運算符號(關鍵字是可以作為php的變量名稱使用)
4)變量名區分大小寫(駝峰式命名方式)
3、工具函數
var_dump(); 打印一個變量的內容和類型
isset($a); 判斷一個變量是否存在,返回的值為布爾類型的值
unset($a); 清除變量a
empty($b); 判斷b的值是否為空
4、可變變量
$hello = "world";
$$hello = "name";
$$$hello = "age";
$$$$hello = "sex";
echo $hello;
echo "<br>";
echo $world;
echo "<br>";
echo $name;
echo "<br>";
echo $age;
有時候使用可變變量名是很方便的。就是說,一個可變變量獲取了一個普通變量的值作為這個可變變量
變量名
5、變量的引用
引用操作符 & 可以在關聯賦值中使用,就像一個別名,使得變量都指向了內存的相同地址
$a = 10;
$b = 20;
$c = &$a; (就像給變量取了個別名)
$a=100;
echo $a;
echo "<br>";
echo $c;
$c=500;
echo "<br>";
echo $a;
echo "<br>";
echo $c;
1)只有變量才有地址,只有變量才能有引用
2)一個變量發生變化,另一個變量的值也會變化
3)在使用unset()這個函數時,如果有引用關系,只是解除了這種
引用關系,只刪除一個名字,另一個還在。
4)如果兩個變量是應用關系,一個變,另一個也變;但如果給其中一個引用
不是普通的值,而是一個新的引用,則改變引用關系。
6、php變量類型的介紹
php是弱類型語言,類型是由值決定的
PHP支持八種原始類型——var_dump()
--四種標量類型:
布爾類型(boolean)
整型(integer)
浮點型(float)(浮點數,也作double)
字符串(String)
--兩種復合類型:
數組(Array)
對象(Object)
--最後是兩種特殊類型:
資源(Resource)
NULL
一個變量賦值為空,就是清除了這個變量
echo "以下是四種變量類型<br>";
$var = true;
var_dump($var);
echo "<br>";
$var = 10;
var_dump($var);
echo "<br>";
$var = 10.12;
var_dump($var);
echo "<br>";
$var = "hello world";
var_dump($var);
echo "<br>";
echo "以下是兩種復合類型<br>";
$var = array("one","two","three");
var_dump($var); //array
echo "<br>";
echo "<br>";
class Demo{
var $one = 10;
var $two = 20;
var $three = 30;
}
$var = new Demo;
var_dump($var); //object
echo "<br>";
echo "以下輸出兩種特殊的類型<br>";
$var = mysqli_connect("localhost",‘root‘,"");
var_dump($var);
echo "<br>";
$var = null;
var_dump($var);
echo "<br>";
1)php布爾類型(boolean)
boolean為假值的情況:boolean的false
int 0
float 0.0 0.00
string ""
string "0"
array 空數組為假
其他情況均為真值
2)整型和浮點型
整型值可以用十進制、十六進制、八進制符號指定,前面可以加上可選的符號(-或者+)代表數值的正負
整數值有最大的使用範圍,這與平臺有關,對於32位系統而言範圍:
負的2的31次方到正的2的31次方,31位存儲位,一位符號位
-2147483648~2147483648,PHP不支持
無符號整數。如果超出了則變成float型。
ord()這個函數可以輸出ASSI碼值 eg、 echo ord("h");
整數聲明方法: $a = 10; 十進制
$b = 077; 八進制
$c = 0xff; 十六進制
mkdir("/user/hello",0755);
3)浮點數(也叫雙精度數或實數)
是包含小數部分的數,通常用來表示整數無法表示的數據,如金錢值、距離值、速度值等
浮點數的字長和平臺相關,盡管通常最大值是 1.8e308 並具有14位十進制數字的精度
可以用以下任何十進制數字的精度,到一定長度會以科學計數法顯示
浮點數是一個近似數,不要用等號去判斷兩個浮點數是否相等
4)字符串的聲明及定義
(1) 一個字符 ,和多個字符都是字符串
(2)字符串的聲明需要用 單引號 或 雙引號引起來
(3)字符串是沒有長度限制的 "" " " "無限長"
(4) 在單引號中可以使用雙引號,在雙引號中可以使用單引號
(5) 在單引號中不能再使用單引號,在雙引號中不能再使用雙引號
(6) 在單引號和雙引號中可以使用轉義字符 \,可以將沒有意義的字符變得有意義,
也可以將有意義的字符變得沒意義
5)PHP變量的其他數據類型
$arr = array(1,2,3,4,5);
$arr2=array(
"foo"=>"bar",12=>true
);
class Person{
var $name;
var $age;
var $sex;
function say(){
}
function eat(){
}
$person = new Person();
}
$file = fopen(‘text.txt‘,"r");
echo fread($file);
fclose($file);
6)偽類型
並不是php語言中的基本數據類型,只是因為php是弱類型語言,所以在一些函數中一個參數可以
接收多種類型的數據,還可以接收別的函數作為回調函數使用,為了確保代碼的易讀性介紹一些偽類型的使用
mixed :說明一個參數可以接受多種不同的類型
number:說明一個參數可以是integer 或者 float
callback:接受一個用戶自定義函數作為參數
7、 php的數據類型之間的轉換和檢測
getType() 獲取變量類型
1)強制轉換
(1)setType(變量,類型); 將什麽變量設置為什麽類型 ----是將原變量給轉換了
(2)在變量使用時,前面加上類型符號 ----- 是在賦值時給新變量一個新類型,原變量類型不變
$int = "100000";
$d = (int)$int;
echo getType($d);
(3)intval(),floatval(),strval() 也是將新變量轉換了,原變量不變
8、 常量的聲明和使用
一旦聲明,這個常量的值不會被改變
初始化靜態段 ----裏面存的數據不靈活
1)常量是使用函數 define()聲明的
define("ROOT",10);
2)如果常量沒有聲明,則常量名在使用時,會自動轉為字符串(效率很低)
error_reporting(E_ALL& ~E_NOTICE);
$root = "localhost";
echo ROOT;
輸出字符串“ROOT”
3)常量名稱不要加 $符號
4)常量名稱默認區分大小寫 習慣上常量的名稱要全部大寫
5)可以使用define()第三個參數決定是否讓這個常量名稱區分大小寫 true false
變量都區分大小寫,常量可以自定義區分大小寫,其他php語法都不區分大小寫
6)常量的值只支持標量數據類型
7)常量不能使用 unset()釋放
8) 可以使用defined()判斷 一個常量是否存在
if(defined("ROOT")){
echo ROOT+10;
}else{
echo "1111111";
}
可以用函數constant()來讀取常量的值
用get_defined_constants()可以獲得所有已定義的常量列表
9)常量有魔術常量和系統常量
魔術常量 值不像PI 一樣,它的值在環境發生變化時會改變,如_LINE_文件中的當前行號
幾個php的魔術常量
_LINE 文件中的當前行號
_FILE 文件的完整路徑和文件名
_DIR 文件所在的目錄
_FUNCTION 函數名稱
_CLASS 類的名稱
_NAMESPACE 當前命名空間的名稱
9、PHP的運算符
運算元 運算符 運算元
1 + 1
一元運算符 +1 -1 ++ -- ==
二元運算符 + - * / % > < = == ===
三元運算符 1?2:3
$a = 10
算術運算符號 + - * / % ++ --
賦值運算符號 = += -= *= /= %=
比較運算符 > < == >= <= ===?= ?==
邏輯運算符 && || !
位運算符號 & | ~ >> <<
其他運算符號 ?: @ =>
1)算數運算符號
除數不能為零
在其它語言中(不是在PHP中),+號除了有 加法的作用, 還有連接字符串的功能
$a = 10;
$b = 5;
echo $a/$b;
echo "<br>";
echo 1+1+"4+5+6"+1+1; //會將字符串自動轉換為相應的數據類型,所以會轉為4
echo "<br>";
echo 1+1+"4e+5+6"+1+1; //會將字符串自動轉換為相應的數據類型,所以會轉為4乘以10的5次方
% 余數的結果,正負號取決於前面的數,跟後面無關
1)讓一個數不超過一個值(計算範圍)
2)求什麽被整除
if($num%4 == 0){}
13.45%2.23456 其實對小數求模沒有意義,php中會割舍為整數然後求模
++ 自增
$a = 5;
$a++ 先用再加
++$a 先加再用
2) 賦值運算符
= += -= *= /= %= .=(將變量與所賦的值相連後的結果賦給該變量)
“.” 可以直接連變量或者字符串,但是不能直接連整數等
單引號不解析變量,雙引號可以解析變量
echo "這個變量的值:".$a."<br>";
echo "<br>";
echo "這個變量的值:$a<br>";
3)比較運算符
(1)比較後的結果是一個 boolean值,用在if和while等語句中
4>3 true
== 比較的是內容
====全等,不僅內容要相等,而且兩邊類型要相等
4)邏輯運算符
就是將比較運算符連接在一起
&& || !
邏輯運算符的特性:
特性: 短路
$a =1;
&& and $a > 5 && $a < 100 明明兩邊都要執行,前邊如果不成立後面也就不去執行了
|| or
$a = 8;
$a > 5 || $a < 100
boolean 型不參與++運算
賦值運算符優先級最低
$a=0;
$b=0;
if($a = 3 && $b = 3){
$a++;
$b++;
}
echo $a.",".$b; //1,4
$a=0;
$b=0;
if($a = 3 || $b = 3){
$a++;
$b++;
}
echo $a.",".$b; //1,1
5)php中的位運算符
& 按位與 | 按位或 ^ 按位異或 ~ 按位非 << 左移 >> 右移
6)其他運算符
運算元 ? 運算元 :運算元
條件 ? 語句 :語句
條件 ? 表達式 : 表達式
一 ? 二 : 三
如果"一"的條件成立,則執行 "二",否則執行 "三"
7)php運算符的優先級和表達式
10、 PHP流程控制
順序結構
分支結構
{
1、單一條件分支結構 (if)
2、雙向條件分支結構 (if 加上 else從句)
3、多向條件分支結構 (if else if子句,switch語句)
在多路分支(if else if)中,只能進入一個 ******
switch-case語句語法
1、switch()括號中,必須是一個變量
2、在switch(){}中放的是多個case 語句,case空格,後面放的是值,
值的後面使用一個 冒號:
switch (變量){
case 值1:
語句;
語句;
語句;
語句;
語句;
break;
case 值2:
語句;
語句;
語句;
語句;
語句;
[break;] (可選)
case 值3:
語句;
語句;
語句;
語句;
語句;
break;
default:語句;
break;
}
switch case 需要註意的一些細節:
1、如果在case中語句過多,就需要將多個語句做成一個函數之類
2、switch(變量) 變量的類型 只能允許兩種類型: 整型和字符串
3、break 是退出switch結構使用的,如果需要同時匹配多個值時,可以使用多個case而不加break;
else if 判斷範圍時使用
switch case 使用於單個值匹配進行分支
4、巢狀條件分支結構
指的是在語句中可以再嵌套幾層
}
循環結構
while語句
do...while 循環
for 語句
goto 語句
特殊的流程控制語句
循環必須有退出循環的條件,
while 循環不是做計數用的,適合條件循環
for 循環 計數用
do-while 程序會先執行 do語句體中的語句,然後再檢查表達式的值,如果符合條件表達式,就再
進行 do 語句體中的語句,直到條件不符合為止
while(條件表達式){
循環體
}
//第一步先執行 表達式, 表達式為true時, 才執行循環體
do{
循環體
}while(條件表達式);
//第一步 先執行循環體,再判斷條件表達式,成立則執行下一個循環體
循環結構for語句 (適合用計數做循環)
for( 表達式一;表達式二 ; 表達式三 ){
echo "循環體<br>";
}
第一部分,先執行表達式一,
第二部分,再執行表達式二,
第三部分,再執行 循環體,
第四部分,再執行 表達式三
第五部分,再執行表達式二
註意,表達式一,只被執行一次
表達式一:初始化條件 $i = 0;
表達式二:條件表達式,成立則執行循環體
表達式三:是一個自增條件 $i++,
三部分都能提出來,但是for()中的兩個分號不能省略
九九乘法表四種打印方法
for($i=1;$i<=9;$i++){
for($j = 1 ;$j<=$i;$j++){
echo "$j X $i = ".($i*$j)." ";
}
echo "<br>";
}
echo "<br>";
for($i=1;$i<=9;$i++){
for($j = $i ;$j>=1;$j--){
echo "$j X $i = ".($i*$j)." ";
}
echo "<br>";
}
echo "<br>";
for($i=9;$i>=1;$i--){
for($j = 1 ;$j<=$i;$j++){
echo "$j X $i = ".($i*$j)." ";
}
echo "<br>";
}
echo "<br>";
for($i=9;$i>=1;$i--){
for($j = $i ;$j>=1;$j--){
echo "$j X $i = ".($i*$j)." ";
}
echo "<br>";
}
11、特殊流程控制語句
1)break (break後面加數字可以退出多層循環)
跳出循環 break是一個指令,break1是退出一層循環,break2 是退出兩層循環 break3是退出三層循環
2)continue
中斷本次循環,繼續下一次循環
3)exit
當前的腳本中只要執行到exit語句,而不管它在哪個結構中都會直接退出當前腳本。exit是一個函數
,可以帶參數輸出一條消息,並退出當前腳本。它的別名是die()
while($i < 100){
if($i %3 == 0){
continue;
echo "{$i}aaaaaaaaaaaaaaaaaaaaaaaaa<br>}";
}
$i++;
}
這是一個死循環
12、流程控制語句goto
跳轉
echo "11111111111<br>";
goto nh; (跳轉到標記處)
echo "2222222222222<br>";
echo "333333333333333<br>";
nh: (標記)
echo "44444444444444444<br>";
循環
$x = false;
$i=0;
xx:
echo "{$i}11111<br>";
if($i >5)
goto nz;
$i++;
goto xx;
goto的得與失
goto 語句經常帶來錯誤或隱患。它可能跳過了某些對象的構造、變量的初始化、重要的計算等語句。
13、PHP函數
函數:是一段完成指定任務的已命名代碼塊。函數可以遵照給它的一組值或參數完成特定的任務,並且可能返回
一個值。在PHP中有兩種函數:自定義函數與系統函數。
函數的優越性:
控制程序設計的復雜性
提高軟件的可靠性
提高軟件的開發效率
提高軟件的可維護性
提高程序的重用性
讓表格隔行換色代碼
echo ‘<table border="1" width="800" align="center">‘;
echo ‘<caption><h1>表格</h1></caption>‘;
for($i = 0;$i<10;$i++){
$bg = ($i%2==0)?‘#cccccc‘:"";
echo ‘<tr bgcolor="‘.$bg.‘">‘;
for($j=0;$j<10;$j++){
echo ‘<td>‘.$i.‘</td>‘;
}
echo "</tr>";
}
echo ‘</table>‘;
函數的定義和應用、函數的語法格式
自定義函數的返回值
輸出錯誤
error_reporting(0);
error_reporting(E_All);
file_put_contents("demo.html",table("成績表",50,5,3,‘green‘,10,400,‘right‘)); 新建demo.html文件,將調用的函數生成的html放入
demo.html文件中
函數遇到return ,函數return下面的代碼都不會執行了
return除了可以終止函數,還可以返回值
1)函數名定義時必須要有意義,建議駝峰式命名
2)重復的函數名不能聲明 ,不能跟自定義的函數重名,也不可以和系統函數重名
自定義函數語法格式:
function 函數名稱 (參數1,參數2,參數3){
程序內容敘述(函數體);
return 返回值 //如需函數有返回值時使用
}
函數的使用:
函數名稱([參數1,參數2,參數3。。。。])
了解一個函數: 1)了解函數功能
2)了解參數
3)了解返回值
function_exists()判斷函數是否存在
3)PHP局部變量
PHP變量的範圍
function demo(){
$age = 30;
echo "你吃飯了沒<br>";
}
echo demo();
函數調用了才執行
函數內部聲明的變量,只有調用時才執行,調用結束後,函數中聲明的變量會被釋放
函數內部聲明的變量,只能在函數內部調用,這就是——————局部變量
函數的參數,就是一個局部變量,聲明成形參的,可以在調用時,給值,傳值
4)PHP全局變量
全局變量:在函數外部聲明的變量,可以在每個函數中使用。(順序)
在函數中局部變量會覆蓋全局變量的能見度,因此在函數中無法直接調用使用全局變量
函數中若要使用全局變量時,必須要利用global 關鍵字定義目標變量,以告訴函數主體
此變量為全局。
在函數內部如果需要使用函數外部的變量,需要使用global關鍵字,將外部變量引入
只要將全局變量聲明在調用之前,在調函數時就能找到
在外面聲明的變量也好常量也好,如果沒有unset()釋放,都是腳本結束的時候釋放。
而函數內部的局部變量,在函數調用結束時就會釋放
九個全局數組:$_POST[‘a‘]=100; $_GET[‘b‘]=300;
全局數組中的變量,默認都是全局的,不需要用global去引入了
5)PHP靜態變量
內存: 棧內存、初始化靜態段
局部變量、全局變量聲明後在棧內存中
static $c 這樣的變量存在初始化靜態段中
靜態變量:
1、在函數中聲明的靜態變量只在第一次調用時聲明
2、第二次以後,一看是靜態變量,就先到靜態區中,看一下有沒有這個變量,如果有就使用,
而不去再聲明
3、靜態變量,在同一個函數多次調用中共享
靜態變量一般都是在函數內部聲明
6)
function demo(){
static $a=0;
$a++;
echo $a."<br>";
}
function test(){
static $a=0;
$a++;
}
demo();
demo();
test();
test();
test();
test();
demo();
demo();
輸出結果為 1、2、3、4、5
7)PHP常規參數的函數
函數三要素: 1、函數的功能描述
2、函數的參數
3、函數的返回值
常規參數的函數格式說明:所謂常規參數的函數,就是實參和形參應該個數相等、類型一致
偽類型參數
number add(number $a ,number $b)
mixed funName(mixed $a)
8)引用參數的函數
引用變量的特點:$a = 10; $b = &$a; $a = 400; $b = 800;
1、只有在內存中的變量才有地址。
2、有引用關系的兩個變量,一個變,另一個就變,相當於兩個是一個
如果在函數說明中,有&出現,說明這個參數是一個引用參數,在調用時傳參數時,就必須傳一個變量
註意:如果在函數的形參中使用"&"修飾參數,在調用該函數時必須傳入一個變量給
這個參數,而不是傳遞一個值。
9)PHP默認參數的函數
function demo($name = "shf",$age = "two",$sex = ‘three‘,$email = "four"){
echo "{$name}=={$age}==={$sex}===={$email}";
}
demo("妹子");
默認參數([]中的)的函數格式說明:
在php中,支持函數的默認方式調用。如果在調用函數時沒有指定參數的值,在函數中會
使用參數的默認值。
註意:默認參數必須列在所有沒有默認值參數的後面
10)PHP可變個數參數的函數
func_get_args();//返回一個數組,包含所有參數
func_num_args() //返回參數總數
func_get_arg() //接收一個數字參數,返回指定參數
function demo(){
$arr=func_get_args();
$sum = 0;
for($i=0;$i<count($arr);$i++){
$sum +=$arr[$i];
}
return $sum;
}
echo demo(1,2,3,4,5,6,7,8,9);
下面代碼效果同上
function demo(){
$arr=func_get_args();
$sum = 0;
for($i=0;$i<func_num_args();$i++){
$sum +=func_get_arg($i);
}
return $sum;
}
echo demo(1,2,3,4,5,6,7,8,9);
11)變量函數
如果將一個函數名稱(字符串)給一個變量(字符串),然後在這個變量後面加上括號
,就會調用這個變量值對應的函數
function add($a,$b){
return $a+$b;
}
$var = "add";
echo $var."<br>";
echo $var(10,20);
12)回調函數
在使用一個函數的時候,如果傳一個變量不能解決多大的問題。就需要傳一個過程進入
到函數中,改變函數的執行行為。
在函數的調用時,在參數中傳的部署一個變量或一個值,而是一個函數。這就是回調函數
參數。
$arr = array("aaa","a","aaaaaa","sdfghjkl","xcvbnm","xc","kjhgfdsa");
function mycom($a,$b){
if(strlen($a)>strlen($b)){
return -1;
}else if(strlen($a)<strlen($b)){
return 1;
}else{
return 0;
}
}
print_r($arr);
usort($arr,"mycom");
echo "<br>";
print_r($arr);
function fun($one="1",$two="2",$three="3"){
echo "$one===========$two==========$three<br>";
}
fun();
參數個數如果是變長的時,就不能直接調用這個函數
要借助於 call_user_func_array("fun",array(111));
if(count($_GET==1)){}
fun()
php 入門筆記