PHP從零開始——學習筆記(一)

PHP介紹

PHP的強大功能:
1、運行在服務器端:學會了PHP,就可以指揮服務器給你幹活,甚至是搞破壞_(千萬不能真這麼做咯),WEB網站的大部分數據都是存儲在服務器端的,PHP就是用來處理這些存儲在服務器的數據的(功能強大吧)。

2、跨平臺:服務器可以是多種平臺的服務器,比如Linux、Windows、Unix,你都可以指揮(不用怕只能指揮一種服務器啦吧)。

3、腳本語言:它是通過編寫腳本,也就是一行行的計算機指令(也可以理解爲特定的英文單詞),來指揮服務器來工作的,因此,在編寫PHP的過程其實就是與老外(服務器成老外啦)交流的過程,交流的語言就是PHP。

4、免費:免費使用(天下還真有免費的午餐)。

開始學習

編寫PHP代碼,寫PHP代碼很簡單,就是一行簡單的代碼。例如下面這個樣子:

<?php
    echo"大家一起來學習PHP!";
?>

還可以寫成一行代碼。注:單引號和雙引號都可以。

<?php echo "大家一起來學習PHP!";?>
<?php echo '大家一起來學習PHP!';?>

效果一樣
PHP代碼可以像JavaScript一樣插在HTML裏

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>php語法</title>
    </head>
    <body>
        <p>
      <?php echo php代碼;?>
        </p>
    </body>
</html>

但注意後面的?>是可以省略的。
字符串:在PHP中可以直接通過echo輸出字符串。

<?php echo "Hi php!";?>
//還可以這麼連接兩個字符串
<?php echo "Hi" . "php";?>

PHP裏可以用.(英文輸入法裏的句號也就是——點)來連接兩個字符串。還有上面的代碼裏應該看到了我的註釋了,對就是雙斜扛//這個是PHP裏的註釋符。
基礎瞭解後就正式開始知識點

變量

變量是用於存儲值的,我們命令服務器去幹活的時候,往往需要產生一些數據,需要臨時性存放起來,方便取用。我們也可以理解爲,變量就像一個購物袋,我們可以用來裝蘋果、榴蓮(當然也可以用來裝玫瑰),需要注意的是,一般情況下一個變量只能裝一個(不要太貪心)值。然後用一個代碼來看看怎麼定義變量的:

<?php
   $var = "歡迎來到我的博客:";
   echo $var;
   $var = "https://zxcv0221.github.io";
   echo $var;
?>

可以看出變量名需要用"美金"來標識,變量命名也是有規則的:
摘自慕課網:自學的好地方

可變變量

普通可變變量

一個可變變量獲取了一個普通變量的值作爲這個可變變量的變量名,就是可以使用兩個美元符號,使一個變量成爲一個可變變量。比如

<?php
$a= 'hello';
$$a= 'world';
echo "$a ${$a}";
echo "$a $hello";
?>

代碼跑出來,打印出兩個hello world

可變變量用於數組

講可變變量用於數組要解決一個問題,就是當寫下代碼$$a[1]的時候,解析器需要知道我們是想讓$a[1]作爲一個變量呢還是讓$$a作爲一個變量並且取出該變量中索引爲[1]的值。
解決辦法:對於第一種情況寫成${$a[1]}即可。第二種情況寫成${$a}[1]

數據類型

PHP的數據類型也分爲:整型、浮點型、字符串類型、布爾類型等等不同的數據類型所佔的“地盤”也不一樣。可以通過這樣一個函數來查看數據所佔空間的大小。

<?php 
echo $m1 = memory_get_usage(); 
echo "<br />";//這是換行符
$var_string="123";
echo $m2 = memory_get_usage()-$m1; 
echo "<br />";
$n=123;
echo $m3 = memory_get_usage()-$m1-$m2; 
echo "<br />";
$f=123.00;
echo $m4 = memory_get_usage()-$m1-$m2-$m3; 
echo "<br />";
?>

在這裏插入圖片描述
然後第一行是初始化所消耗的內存,下面的話,就是要減去初始化所佔的內存就能看出來這個數據所佔的內存了。
輸出數據類型:

<?php $string = "就是就是";
      var_dump($string);
      echo "<br />";
      $string = 9494;
      var_dump($string);
      echo "<br />"
?>

在這裏插入圖片描述
布爾類型就是

<?php 
    $man = "男";
	$flag = $man == "男";
	echo $flag;
	echo "<br />";
	var_dump($flag);
?>

在這裏插入圖片描述
判斷是否滿足條件的時候,是用“true”表示滿足,用“false”表示不滿足。注意,當用”echo”指令輸出布爾類型時,如果是“true”則輸出的是“1”,“false”則什麼也不輸出。
浮點型

  1. 正常格式輸入就可以,
    2.輸入小寫e或者大寫E就可以用科學計數法來
    表示;而+ - 號也不是加減
    在這裏插入圖片描述
    整型:可以用八進制、十進制、十六進制指定;
    字符串:
    如果需要輸出雙引號或者單引號怎麼辦?有兩種方法:
    1.單引號裏嵌套雙引號或者雙引號裏嵌套單引號。
    2.使用轉義字符\
    在這裏插入圖片描述
    當輸出時,引號遇到了美元
<?php 
$love = "I love you!"; 
$string1 = "PHP,$love";
$string2 = 'PHP,$love';
echo $string1;
echo "<br />";
echo $string2;
?>

在這裏插入圖片描述
總結:
當雙引號中包含變量時,變量會與雙引號中的內容連接在一起;

當單引號中包含變量時,變量會被當做字符串輸出。
輸出長字符串比如一首歌或者詩。
首先使用定界符表示字符串(<<<),接着在“<<<“之後提供一個標識符GOD,然後是字符串,最後以提供的這個標識符結束字符串。

<?php 
$string1=<<<GOD
我有一隻小毛驢,我從來也不騎。
有一天我心血來潮,騎着去趕集。
我手裏拿着小皮鞭,我心裏正得意。
不知怎麼嘩啦啦啦啦,我摔了一身泥.
GOD;

echo $string1;
?>

標識符可以隨便用,隨便一個單詞或者字母都可以,保證前後保持一致就OK。結尾的一行除了標識符和;不能有其他的符號,空格也不行。
特殊類型:
NULL(NULL):NULL是空類型,對大小寫不敏感,NULL類型只有一個取值,表示一個變量沒有值,當被賦值爲NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認爲爲NULL。

<?php 
 error_reporting(0); //禁止顯示PHP警告提示
 $var;
 var_dump($var);
 $var1=null;
 var_dump($var1);
 $var2=NULL;
 var_dump( $var2);
 $var3 = "節日快樂!";
 unset($var3);
 var_dump($var3);
?>

unset()函數可以釋放被賦值後的變量。釋放後變量就跟沒賦值一樣。類型就會變成NULL。

常量

常量的定義

什麼是常量?常量可以理解爲值不變的量(如圓周率);或者是常量值被定義後,在腳本的其他任何地方都不可以被改變。PHP中的常量分爲自定義常量和系統常量。
自定義常量:
自定義常量是根據我們開發的需要,而定義的常量,它通過使用PHP中的函數define()定義。

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有三個參數,第一個參數“constant_name”爲必選參數,常量名稱,即標誌符,常量的命名規則與變量的一致,但是要注意哦,它可不帶美元符號
第二個參數“value”爲必選參數,它是常量的值。
第三個參數“case_sensitive”爲可選參數,指定是否大小寫敏感,設定爲true表示不敏感,一般不指定第三個參數的情況下,默認第三個參數的值爲false。如define("PI",3.14);

常量的作用:

常量主要功效是可以避免重複定義,篡改變量值。在我們進行團隊開發時,或者代碼量很大的時候,對於一些第一次定義後不改變的量,如果我們使用變量,在不知情的情況下,使用同一變量名時,變量值就會被替換掉,從而會引發服務器執行錯誤的任務。

<?php
define("PI",3.14);
$r=3;
echo "面積爲:".(PI*$r*$r)."<br />";
echo "周長爲:".(2*PI*$r)."<br />";
?>

可以重複使用。

特殊的常量——系統常量

系統常量是PHP已經定義好的常量,我們可以直接拿來使用
(1)FILE :php程序文件名。它可以幫助我們獲取當前文件在服務器的物理位置。

(2)LINE :PHP程序文件行數。它可以告訴我們,當前代碼在第幾行。

(3)PHP_VERSION:當前解析器的版本號。它可以告訴我們當前PHP解析器的版本號,我們可以提前知道我們的PHP代碼是否可被該PHP解析器解析。

(4)PHP_OS:執行當前PHP版本的操作系統名稱。它可以告訴我們服務器所用的操作系統名稱,我們可以根據該操作系統優化我們的代碼。

1 |<?php
2 |echo __FILE__;
3 |echo "<br />";
4 |echo __LINE__;
5 |echo "<br />";
6 |echo PHP_VERSION;
7 |echo "<br />";
8 |echo PHP_OS;
9 |echo "<br />";
10|?>

Augenstern

常量取值

獲取常量值的有兩種方法取值。第一種是使用常量名直接獲取值

<?php
define("PI",3.14);
$r=1;
$area = PI*$r*$r; 
?>

計算圓的面積。
第二種是使用constant()函數。它和直接使用常量名輸出的效果是一樣的,但函數可以動態的輸出不同的常量,

mixed constant(string constant_name)

(注:mixed表示函數返回值類型爲多種不同的類型,string表示參數類型爲字符串類型)
同樣是計算圓的面積:

<?php
define("PI",3.14);
$r=1;
$area = constant("PI")*$r*$r;
?>

如何判斷一個常量是否被定義

如果常量被重複定義以後,PHP解析器會發出“Constant XXX already defined”的警告,提醒我們該常量已經被定義過。
defined()函數可以幫助我們判斷一個常量是否已經定義,其語法格式爲:bool defined(string constants_name)
它只有參數constant_name,指的是要獲取常量的名稱,若存在則返回布爾類型true,否則返回布爾類型false; (注:bool表示函數返回值類型爲布爾類型

<?php 
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1);
var_dump($is2);
?>

運行結果如下:
Augenstern

運算符

PHP運算符一般分爲算術運算符、賦值運算符、比較運算符、三元運算符、邏輯運算符、字符串連接運算符、錯誤控制運算符。
算術運算符:
Augenstern

賦值運算符

PHP的賦值運算符有兩種,分別是:

(1)“=”:把右邊表達式的值賦給左邊的運算數。它將右邊表達式值複製一份,交給左邊的運算數。換而言之,首先給左邊的運算數申請了一塊內存,然後把複製的值放到這個內存中。

(2)“&”:引用賦值,意味着兩個變量都指向同一個數據。它將使兩個變量共享一塊內存,如果這個內存存儲的數據變了,那麼兩個變量的值都會發生變化。

<?php 
    $a = "我的博客";
	$b = $a;
	$c = &$a;
	$a = "https://zxcv0221.github.io";
	echo $b."<br />";
	echo $c."<br />";
?>

Augenstern

比較運算符:

Augenstern
示例如下:

<?php  
    $a = 1;
	$b = "1";
	var_dump($a == $b);
	echo "<br />";
	var_dump($a === $b);
	echo "<br />";
	var_dump($a != $b);
	echo "<br />";
	var_dump($a <> $b);
	echo "<br />";
	var_dump($a !== $b);
	echo "<br />";
	var_dump($a < $b);
	echo "<br />";

	$c = 5;
	var_dump($a < $c);
	echo "<br />";
	var_dump($a > $c);
	echo "<br />";
	var_dump($a <= $c);
	echo "<br />";
	var_dump($a >= $c);
	echo "<br />";
	var_dump($a >= $b);
	echo "<br />";
?>

運行結果如下:
Augenstern

三元運算符:

(“?:”)三元運算符也是一個比較運算符,對於表達式(expr1)?(expr2):(expr3),如果expr1的值爲true,則此表達式的值爲expr2,否則爲expr3。看代碼就更清楚了:

<?php 
    $a = 78;//成績
	$b = $a >= 60?"及格":"不及格";
	echo $b;
?>

運行結果當然是及格
邏輯運算符:
邏輯運算符主用是進行邏輯運算的,例如:邏輯與、邏輯或、邏輯異或、邏輯非等,在PHP中常用的邏輯運算符如下表:
Augenstern
我們可以從投票的角度來理解邏輯運算:

1、邏輯與:要求所有人都投票同意,纔會通過某協議;

2、邏輯或:只要求一個人投票同意就行;

3、邏輯異或:只能有且只能有一個人投票同意;

4、邏輯非:某個人要反對,但是通過邏輯非,使其反對無效;

“與”和“或”有兩種不同形式運算符的原因是它們運算的優先級(就是運算的有限順序,比如我們小學的時候學習四則運算,加減乘除混合在一起啦,優先計算乘除,再計算加減)不同。

示例:

<?php 
    $a = TRUE; //A同意
	$b = TRUE; //B同意
	$c = FALSE; //C反對
	$d = FALSE; //D反對
	//順便複習下三元運算符
	echo ($a and $b)?"通過":"不通過";
	echo "<br />";
	echo ($a or $c)?"通過":"不通過";
	echo "<br />";
	echo ($a xor $c xor $d)?"通過":"不通過";
	echo "<br />";
	echo !$c?"通過":"不通過";
	echo "<br />";
	echo ($a && $d)?"通過":"不通過";
	echo "<br />";
	echo $b || $c || $d?"通過":"不通過";
?>

Augenstern

連接運算符

字符串連接運算符是爲了將兩個字符串進行連接,PHP中提供的字符串連接運算符有:
(1)連接運算符(“.”):它返回將右參數附加到左參數後面所得的字符串。
(2)連接賦值運算符(“.=”):它將右邊參數附加到左邊的參數後。

示例:

<?php 
    $a = "這位大佬";
	$tip = $a.",歡迎您指點我的博客!";
    $b = "我自橫刀向天笑";	
    $b .="去留肝膽兩崑崙";
	$c = "將進酒";	
    $c = $c."杯莫停!";
	echo  $tip."<br />";
	echo  $b."<br />";
	echo  $c."<br />";
?>

Augenstern

取模運算符

直接看代碼:

<?php 
     $maxLine = 4; //每排人數
	 $no = 17;//學生編號
     $line = ceil($no / $maxLine);
	 $row = $no % $maxLine ? $no % $maxLine : $maxLine;
	 echo "編號<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>個位置";
?>

運行結果:
Augenstern

foreach語句

在PHP中foreach循環語句,常用於遍歷數組(下面介紹,這裏主要看這個語句的用法),一般有兩種使用方式:不取下標、取下標。
(1)只取值,不取下標

<?php
 foreach (數組 as){
//執行的任務
}
?>

(2)同時取下標和值

<?php
foreach (數組 as 下標 =>){
 //執行的任務
}
?>

寫個示例:

<?php
$books = array(
'2010'=>'鬼谷子',
'2011'=>'人性的弱點',
'2012'=>'狼道',
'2013'=>'莫非定律',
'2014'=>'山海經',
'2015'=>'紅樓夢',
'2016'=>'西遊記',
'2017'=>'水滸傳',
'2018'=>'三國演義',
'2019'=>'金瓶梅嘿嘿',
);//10本書的編號和書名,用數組存儲

//使用循環結構遍歷數組,獲取編號和書名  
foreach($books as  $v)//foreach($students as $key => $v)只需在這裏把代碼改成這樣即可
{ 
    echo $v;//輸出(打印)書名
	echo "<br />";
}
?>

至於數組 ,後面介紹。先看最後幾行代碼。Augenstern
取下標的自行實現。


說明:我以前使用瀏覽器編譯代碼,現在換編譯軟件了,所以我從現在往後面所學的都會是源碼運行,PHP裏面瀏覽器編譯和源碼還是不一樣的,舉個栗子:瀏覽器裏面編譯,換行符是<br />,而源碼裏面的換行卻是\n與C語言有點相似。

數組

數組就簡單介紹一下:
定義一個數組:array()
可以用array()來新建一個數組,它接受任意數量的用逗號分隔的(key)=>(value)

array( key => value
……
)
//key可以是一個整數int,或字符串string
//value可以是任意類型的值。

最後一個數組單元的逗號可以省去
看個定義一個數組的例子:

<?php
$array = array(
    "lxj" => "lalala",
    "wkx" => "xixixi",
);
//兩種方法
$array = [
    "lxj" => "lalala",
    "wkx" => "xixix",
];
?>

第二種方法我專門去查了一下,這個PHP官方手冊解釋的是自PHP 5.4 起可以用這種方法的,短數組定義方法。

關於key

1.包含有合法的整數型字符串會被轉換爲整型,如“8”,會被存儲爲8。但是“08”不會被強制轉換。因爲他不是一個合法的十進制數。
2.浮點數也會被轉換成整型。小數點後面的會被捨去。注意是捨去,不是四捨五入,而是全部扔了不要(哈哈,真浪費)。
3.布爾類型的也會被轉換成整型,true被存儲爲1,而false被存儲爲0.
4.NULL會被轉換爲空字符串,null實際上會被存儲爲“ ”。
接着說數組:
如果在定義一個數組時多個單元都使用了同一個key,那麼就會只使用最後一個,之前的都會被覆蓋,看個代碼:

<?php//這個代碼同時反映類型強制和覆蓋
$array = array(
    1 => "mary",
    "1" => "jack",
    1.5 => "rose",
    true => "lxj"
);
var_dump($array);
?>

結果呢,只會有lxj
Augenstern
PHP數組還可以有混合key的,就是數組裏的變量既有整型,也有字符串。代碼就不寫了。也沒什麼可舉例子的。

數組的訪問

通過語法:數組名[key]
沒有什麼是代碼解釋不清的。代碼上:

<?php
$array = array(
    "lxj" => "Augenstern",
    0258 => 8520
);
var_dump($array["lxj"]);
var_dump($array[0258]);
?>

這個輸出的就是
Augenstern
tip:方括號和花括號能在這裏互換使用,達到同樣的效果。趕緊試一下去。

增加、修改、刪除數組裏的值

這裏用一個代碼就能看出怎麼玩了:

<?php
$arr = array(
    "lxj" => "Augenstern",
    0258 => 8520,
);
$arr["lxj"] = "zxcv0221";//修改數組值
$arr["wkx"] = "wangkaixin";//增加一個數組值
unset($arr["wkx"]);//刪除wkx這個key和其對應的值
unset($arr);//刪除整個數組
?>

清晰明瞭。數組學習暫時到這裏。

函數

用戶自定義函數

函數如何定義:要定義一個函數,在PHP裏面要先加上function關鍵詞
下面看一個僞代碼(不能運行)函數的例子:

<?php//這是一段僞代碼,爲了直觀的介紹函數的簡單定義而已。
function lxj($var_1, $var_2, $var_3,/*,,,,,,*/)
{
	echo "僞代碼\n";
	return ...;
}//此代碼不能運行
?>

函數名稱自己定義,但是也不是隨便,命名規則:有效的函數名以字母或下劃線打頭,後面跟字母,數字或下劃線。
任何有效的PHP代碼都有可能出現在函數內部,甚至包含其他函數和類的定義。1.函數無需在調用之前被定義,除非是下面的函數是有條件的被定義。2.當一個函數是有條件被定義時,必須在調用函數之前定義。看個例子:

<?php
$makelizi = true;
lizi();//lizi函數還不能調用,因爲它還不存在
lxj();//但是bar函數可以調用,因爲bar函數不是有條件的函數。
if($makelizi){
	function lizi()
	{
		echo "lalala\n";
	}
}
//可以調用lizi函數了,因爲$makelizi的值爲真了。
if($makelizi) lizi();
function lxj()
{
	echo "xixixi\n";
}
?>

這個代碼是可以跑的,自己跑一下對比更明顯,理解更清楚。
再來一個函數套函數的代碼

<?php
function lxj(){
	function wkx(){
		echo "nice,xiongdei\n";
	}
}
//這裏不能直接調用wkx函數,因爲他還不存在。可以理解爲沒有被定義。
lxj();
//現在就可以調用wkx函數了,因爲lxj函數被執行了,使得wkx函數被定義。
wkx();
?>

介紹都在代碼中註釋了。PHP中的所有函數都具有全局作用域,可以定義在一個函數之內而在函數外面調用。相反也可以。PHP不支持函數重載,也不可能取消定義或者重定義已經聲明過的函數。
注意:函數名是大小與大小寫無關的,不過儘量寫成一樣的,養成一個好習慣。
遞歸函數:
PHP中還可以調用遞歸函數,還是來個代碼看看

<?php
function lxj($f=1){
	if($f < 20){
		echo "lalala\n";
		lxj($f+1);
	}
}
lxj();
?>

遞歸函數的調用要注意的是避免調用超過100-200層,因爲可能會堆棧崩潰從而使當前腳本終止。無限遞歸可視爲編程錯誤。

函數的參數

函數的參數可以不填,使其默認參數起作用,也可以傳參。
先看個通過引用辦法傳參的代碼:

<?php
function lxj(&$string)
{
	$string .= "或者其他的";
}
$str = "這是一個字符串,";
lxj($str);
echo $str;//輸出結果:這是一個字符串,或者其他的[Finished in 0.1s]
?>

或者直接傳遞參數,覆蓋默認值

<?php
function lxj($a=10,$b=20)
{
	echo $a+$b;
}
lxj(20,25);
//運行結果:45[Finished in 0.1s]
?>

先總結到這裏,下次接着學習沒學完的函數。

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