首頁  >  文章  >  php教程  >  php學習筆記之基礎知識

php學習筆記之基礎知識

WBOY
WBOY原創
2017-07-18 09:26:212173瀏覽

php學習至今一年有餘,筆記累積挺多的,也挺雜的,寫篇文章整理一下吧。

php基礎部分

<span style="font-family:新宋体">PHP</span>輸出文字的基礎指令:<span style="font-family:新宋体">echo</span><span style="font-family:新宋体">print</span>

echo和print的區別

<span style="font-family:新宋体">echo</span>是php語句, <span style="font-family:新宋体">print</span><span style="font-family:新宋体">print_r</span>是函數,語句沒有回傳值,函數可以有回傳值(即便沒有用)

<span style="font-family:新宋体">echo</span>輸出一個或多個字串。
<span style="font-family:新宋体">print</span>只能列印出簡單型別變數的值(如int,string)
<span style="font-family:新宋体">print_r</span>可以列印出複雜型別變數的值(如陣列,物件)

var_dump和print_r的區別

<span style="font-family:新宋体">var_dump</span>傳回表達式的類型和值,而<span style="font-family:新宋体">print_r</span>只傳回結果,相較於調試程式碼使用<span style="font-family:新宋体">var_dump</span>更便於閱讀。

變數

變數用於儲存值,例如數字、文字字串或陣列。 php 中的所有變數都是以 $ 符號開始的。
php 變數名稱對大小寫敏感!

php 有三種不同的變數作用域:

<code>local(局部)<br>global(全局)<br>static(静态)</code>

函數之外宣告的變數擁有 <span style="font-family:新宋体">Global</span>作用域,只能在函數以外進行存取。

函數內部宣告的變數擁有 <span style="font-family:新宋体">LOCAL</span>作用域,只能在函數內部存取。

<span style="font-family:新宋体">global</span>關鍵字用於存取函數內的全域變數。

php static 關鍵字

通常,當函數完成/執行後,會刪除所有變數。不過,有時我需要不刪除某個局部變數。實現這一點需要更進一步的工作。

要完成這一點,請在您首次宣告變數時使用static 關鍵字:

<code><?php     <br>function mytest() {<br>   static $x=-1;<br>   echo $x;<br>   $x--;<br>}<br>mytest();//-1<br>echo "<br>";<br>mytest();//-2<br>echo "<br>";<br>mytest();//-3<br>?></code>

php類型

php类型:**php 支持八种原始类型。**

布林型

要指定一個布林值,使用關鍵字true 或false。兩個都是大小寫不敏感的。

整數

我們可以使用(int)來將小數強制型別轉換成整數。

<code><?php <br>    var_dump((int)(26/3));//int(8)<br>?></code>

陣列

php中有三種陣列:

<code>索引数组:就是下标是顺序整数作为作为索引(比如第几排第几列)$class[5]<br>关联数组:就是下标是字符串作为索引(比如名字)$class2["zhangsan"]<br>多维数组 - 包含一个或多个数组的数组</code>

下標要嘛是整數,要嘛是字串。

<code><?php <br>$array = array(<br>    "foo" => "bar",<br>    "bar" => "foo",<br>);<br>// 自 php 5.4 起<br>$array = [<br>    "foo" => "bar",<br>    "bar" => "foo",<br>];<br>?></code>

陣列單元可以透過 <span style="font-family:新宋体">array[key]</span>語法來存取。
note: 這並不表示總是給鍵名加上引號。用不著給鍵名為常數或變數的加上引號,否則會使 <span style="font-family:新宋体">PHP</span>不能解析它們。

陣列運算子

範例名稱結果$a $b 聯合$a 和$b 的聯合$a == $b 相等如果$a 和$b 有相同的鍵/值對則為true$a === $b 全等如果$a 和$b 具有相同的鍵/值對且順序和類型都相同則為true$a != $b 不等如果$a 不等於$ b 則為true$a $b 不等若$a 不等於$b 則為true$a !== $b 不全等若$a 不全等於$b 則為true

tr>



<span style="font-family:新宋体">+</span>運算子把右邊的陣列元素附加到左邊的陣列後面,兩個陣列中都有的鍵名,則只用左邊數組中的,右邊的被忽略。

物件

要初始化一個對象,用 new 語句將物件實例到一個變數中。

常用函數

strlen() 函數用來計算字串的長度。
strpos() 函數用於在字串內檢索一段字串或一個字元。

常數

可以用 define() 函數來定義常數。一個常數一旦被定義,就不能再改變或取消定義。
常用的魔術常數:

php學習筆記之基礎知識echo poems ;//outputs "homeric epic"
?>

php字串運算子 p>

在php 中,只有一個字串運算子。
並置運算子 <span style="font-family:新宋体">(.)</span>用來把兩個字串值連接起來。如:echo "a= ".$a."<br>";
左邊將字串文字"a="與變數$a的值連接,第二處是與換行符<span style="font-family:新宋体">"<br>"</span>連接

php函數

函數只有在被呼叫時才會被執行,這點和js是一樣的,同樣,函數定義也是以function關鍵字開頭的。

<code><?php <br>    function sum($x,$y){<br>        $z=$x + $y;<br>        return $z;<br>    }<br>    echo "-2+10= ".sum(-2,10);//outputs "-2+10=8"<br>?></code>

當沒有<span style="font-family:新宋体">return</span>語句時,以上將會變成"-2 10=";

流程控制

在這裡,只講<span style="font-family:新宋体">foreach</span>語句。

<span style="font-family:新宋体">foreach</span>語句遍歷輸出數組:
語法:

foreach (array_expression as $value){ statement};
foreach (array_expression as $key => $value){ statement};

參數<span style="font-family:新宋体">array_expression</span>是指定要遍歷的數組,<span style="font-family:新宋体">$value</span>是數組的值

<code><?php <br>     $actors [0] ="marry";<br>     $actors [1] ="lorry";<br>     $actors [2] = "mike";<br>     foreach ($actors as $values){<br>     echo "name:$values<br>"; <br>}<br>?></code>

以上程式碼將輸出:
name:marry
name:lorry
name:mike

兩個重要的魔術方法

    1. __set( )方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你  要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。
    2. __get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用

php中方法不區分大小寫

require(dirname(__file__).'/global.php'); //引入全局文件
require(dirname(__file__).'/config.ini.php'); //引入基本配置文件

物件運算子與雙冒號運算子

在類別的成員方法裡面,可以用->(物件運算子):<span style="font-family:新宋体">$this->property</span>(其中property 是該屬性名)這種方式來存取非靜態屬性。
靜態屬性則是用 <span style="font-family:新宋体">::</span>(雙冒號):<span style="font-family:新宋体">self::$property</span>來存取。

=>和->

<span style="font-family:新宋体">=></span>陣列成員存取符號,<span style="font-family:新宋体">-></span>物件成員存取符號;
<span style="font-family:新宋体">$this</span>-<span style="font-family:新宋体">>$name=$value</span>:將目前類別的<span style="font-family:新宋体">name</span>變數的值設為<span style="font-family:新宋体">$value</span>;
<span style="font-family:新宋体">$this</span>代表了類別本身,<span style="font-family:新宋体">-></span>是存取其類別成員的運算子
雙冒號運算子(<span style="font-family:新宋体">::</span>)類別名稱<span style="font-family:新宋体">::</span>靜態屬性/方法
<span style="font-family:新宋体">::</span>」用來呼叫類別中靜態的屬性和方法

<span style="font-family:新宋体">include()</span>:包含外部文件,語法格式為include(string filename);
<span style="font-family:新宋体">require()</span>:會輸出錯誤訊息,終止腳本
<span style="font-family:新宋体">include_once()</span>:多次調用相同檔案時,程式只會呼叫一次
<span style="font-family:新宋体">require_once()</span>:先檢查檔案是否在其他地方被呼叫過
<span style="font-family:新宋体">array_pop()</span>:取得並傳回數組中的最後一個元素
<span style="font-family:新宋体">count()</span>:統計數組中的元素個數
<span style="font-family:新宋体">array_search()</span>:取得數組中元素的鍵名
<span style="font-family:新宋体">$array_keys()</span>:取得數組中重複元素的所有鍵名

單引號和雙引號

php把單引號中的資料視為普通字串,不再處理。而雙引號還要對其中的字串進行處理

get和post

$_get[ ]和$_post[ ]全域數組:分別用來接收get和post方法傳遞到目前頁面的資料。 「[ ]」裡面是name.

php參數傳遞常用的方法有3種:$_post[ ]、$_get[ ]、$_session[ ],分別用來取得表單、url與session變量的值。

表單提交中get和post方式的區別歸納如下幾點:

<code>GET是从服务器上获取数据,POST是向服务器传送数据。<br>GET 是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。<br>对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。<br>GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。<br>GET 安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记 录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一 同显示在用户面前。POST的所有操作对用户来说都是不可见的。</code>

在form提交的時候,如果不指定method,則預設為get請求(.net預設是post),form中提交的資料將會附加在url之後,以?分開與url分開。字母數字字元原樣發送,但空格轉換為“ ” 號,其它符號轉換為%xx,其中xx為該符號以16進位表示的ascii(或iso latin-1)值。 get請求請提交的資料放置在http請求協定頭中,而post提交的資料則放在實體資料中;get方式提交的資料最多只能有2048字節,而post則沒有此限制。 post傳遞的參數在doc裡,也就http協定所傳遞的文本,接受時再解析參數部分。獲得參數。一般用post比較好。 post提交資料是隱式的,get是透過在url裡面傳遞的,用來傳遞一些不需要保密的數據,get是透過在url裡傳遞參數,post不是。

1.get請求的資料會附在url之後(就是把資料放置在http協定頭中),以?分割url和傳輸數據,參數之間以&連接

2.get方式提交的數據最多只能是1024字節,理論上post沒有限制,可傳較大量的數據,iis4中最大為80kb,iis5中為100kb

http狀態碼

cookie和session區別

cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設定過期時間,表示這
個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就會消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。
會話cookie一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。若設定了過期時間,瀏覽器就會把cookie
儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。

當程式需要為某個客戶端的請求建立一個session時,伺服器先檢查這個客戶端的請求裡是否已包含了一個session標識
(稱為session id),如果已包含則表示以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來
使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且產生一個與此session相
關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次回應中返回給客戶端保存。儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給
伺服器。
1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
2、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙
考慮到安全應當使用session。
3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
考慮到減輕伺服器效能方面,應使用cookie。
4、單一cookie儲存的資料不能超過4k,很多瀏覽器都限制一個網站最多儲存20個cookie。
5、所以個人建議:
將登陸資訊等重要資訊存放為session
其他資訊如果需要保留,可以放在cookie中

php程式碼規格

1.變數賦值必須保持相等間距和排列

2.每行結尾不允許有多餘的空格

3.確保檔案的命名和呼叫大小寫一致,是由於類unix系統上面,對大小寫是敏感的

4.方法名只允許由字母組成,下劃線是不允許的,首字母要小寫,其後每個單字首字母要大寫

5.屬性的命名只允許由字母組成,下劃線是不允許的⋯⋯

6.對於物件成員的訪問,我們必須始終使用“get"和"set"方法

7.當類別成員方法被宣告為private時,必須以雙底線"__"開頭;被宣告為protected時,必須以單底線" _"開頭;宣告為public的成員屬性則在任何時間都不允許含有底線。

8.如果我們需要把一些常用的方法定義為全域函數,那麼就應該把它們以靜態(static)的形式定義在類別中

9.函數的命名使用小寫和底線,應該能夠描述清楚該函數的功能。

10.boolean值和null值都採用小寫。

11.當一個字串是純文字組成的時候(即不含有變數),則必須總是以單引號(')作為定界符

12.使用array類型宣告關聯數組的時候,應將它分成多行,確保每行的鍵與值的對齊

13.類別中所有程式碼都必須用四個空格進行縮排

14.不允許用var來宣告變量,類別成員變數必須以private,protected和public來宣告。通常用get和set方法來存取類別成員。

15.方法必須總是用private,protected或public來宣告其作用域

16.在函式或方法名稱與參數括號之間不允許出現多餘的空格

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn