博文谷

位置:首頁 > 事務文書 > 學習總結

php學習筆記總結

篇一:php學習總結

php學習筆記總結

調試/*………*/ //…….#..........

插入時考慮清楚字段類型避免插入後出現缺值,亂碼

@ 屏蔽錯誤or die 條件顯示

以前學習php類的總結:

中不能重載,但是能用子類覆蓋父類的方法名稱來實現新的重載

1.1 在子類中調用父類的覆蓋部分可以使用 父類名稱::方法名稱();

l 只能定義類和方法,不能使用final定義成員屬性,因爲final是常量的意思,在php裏定義常量使用的是define函數

2.1 final關鍵字標記的類不能被繼承

2.2 final關鍵字標記的方法不能被子類重寫

t是一個定義常量的關鍵字,在php中定義常量使用的是define()函數,但是在類裏定義常量使用的是“const” 這個關鍵字

3.1在程序中不能修改它的值。

3.2 訪問const 修飾的成員屬性要使用類名,在本類的方法裏使用“self”關鍵字,但不使用"$"符號,也不能使用對象來訪問。

ic關鍵字可以描述類中的成員屬性和成員方法

4.1 static 的成員屬於類,而不屬於任何對象,

4.2 static的成員是在類第一次被加載的時候分配的空間,其他類無法訪問的,只對類的實例共享,能一定程度對類該成員形成保護

4.3 靜態成員放到了“初始化靜態段”,在類第一次加載的時候放入的,可以讓堆內存裏的每個對象共享。所以在靜態方法裏,可以使用這個方法所在的類的“類名”,也可以使用“self”來訪問其他靜態成員。“self”代表這個靜態方法所在的類。

4.3.1 在類裏的靜態方法是不能訪問類的非靜態成員的。

4.3.2 在類的非靜態方法裏可以訪問靜態成員:”self:成員屬性“;

4.4類的靜態變量,非常類似全局變量,能夠被所有類的實例共享,類的靜態方法也是一樣,類似於全局函數。

4.5 在類內函數訪問靜態變量時前面加self::靜態函數

4.6 靜態變量可以在類外直接訪問,訪問方法是類名::靜態變量

4.7 靜態函數可以在類外直接訪問,訪問方式是類名::靜態函數

4.8 在類內靜態函數訪問另一個靜態函數時使用 類名::靜態函數名

4.8.1 靜態函數在類內訪問靜態變量時,訪問方式是類名::靜態變量

4.8.2 靜態函數在類內訪問靜態變量時,訪問方式除了是類名::靜態變量外,還可以使用self::靜態變量

4.9 在類內靜態函數訪問另一個靜態函數時除了使用 類名::靜態函數名外,還可以使用self::靜態函數名,也可以直接調用靜態函數

4.10 靜態函數內不能訪問非靜態變量

4.11 在類內靜態函數不能使用$this->非靜態函數名訪問非靜態函數,可以使用self::非靜態函數名

4.12

5.類裏的”$this“,在php裏面提供了一個本對象的引用$this,每個對象裏面都有一個對象的引用$this來代表這個對象,完成對象內部成員的調用。

5.1 $this 就是對象內部代表這個對象的引用。

6.類裏"self",self 和$this相似,只不過self是代表這個靜態方法所在的類,所以在靜態方法裏,可以使用這個方法所在的類的”類名“,也可以使用"self"來訪問其他的靜態成員,通常使用後者”self::成員屬性“。

7.類裏”__“開頭的函數名

7.1類裏”__“開頭的函數名都是在某一時刻不同情況下自動調用執行的方法。

7.2__toString()方法也是自動被調用,是直接輸出對象引用時自動調用的。比如"$p = new Person()",直接用echo輸出$p會產生錯誤,如果在類裏定義了__toString()方法,再用echo直接輸出對象引用的`時候就不會產生錯誤了

8.對象串行化

8.1 __sleep()方法,在對象串行化的時候,會調用一個__sleep()方法來完成一些睡前的事情,__sleep()函數不接受任何參數,但返回一個數組,其中包含需要串行化的屬性。未被包含的屬性降在串行化時被忽略,如果沒有__sleep()方法,php將儲存所以屬性.

8.2 __wakeup()方法,在重新醒來時,即由二進制串重新組成一個對象的時候,則會自動調用__wakeup(),做一些對象醒來就要做的動作。

8.3 有時你可能需要一個對象在反串行化後立即執行. 爲了這樣的目的,PHP會自動尋找__sleep和__wakeup方法.

9. protected 成員能被同個類中的所有方法和繼承出的類的中所有方法訪問到,不能被父類的實例直接訪問。protected and public 可以動態綁定

10. private 大部分private屬性仍然可以被外部代碼共享. 解決方法是用一對public方法,一個是get(獲取屬性的值),另一個是set(設定屬性的值).

10.1 private 不可以動態綁定。Private成員只存在於它們所在的類內部. 不像public和protected成員那樣,PHP模擬靜態綁定.

10.2 什麼時候用到private?private成員只有當你不想讓子類繼承改變或特殊化父類的行爲時纔用到,這種情況比你想像的要少, 通常來說,一個好的對象分層結構應當允許絕大多數功能被子類特殊化,改進,或改變—這是面向對象編程的基礎之一。一定的情況下需要private方法或變量,例如當你確信你不想允許子類改變父類中的某個特定的部份。

11.抽象類:抽象方法是就像子類中一般的方法的佔位符(佔個地方但不起作用),它與一般方法不同—沒有任何代碼. 如果類中存在一個或更多抽象方法, 那麼這個類就成了抽象類. 你不能實例化抽象類. 你必須繼承它們,然後實例化子類. 你也可以把抽象類看成是子類的一個模板.

如果你覆寫所有的抽象方法, 子類就變成一個普通的類. 如果沒有覆寫所有方法, 子類仍是抽象的. 如果一個類中中包含有抽象方法(哪怕只有一個), 你必須聲明這個類是抽象的, 在class關鍵字前加上abstract. 聲明抽象方法的語法與聲明一般方法不同. 抽象方法的沒有像一般方法那樣包含在大括號{}中的主體部份,並用分號;來結束.

12.接口:如果你建立了一個只有抽象方法的類,你就定義了一個接口(interface). 爲了說明這種情況, PHP中有interface 和implements關鍵字. 你可以用interface來代替抽象類, 用implements來代替extends來說明你的類定義或使用一個接口. 例如, 你可以寫一個myClass implements myIterface. 這兩種方法可以依個人偏愛來選擇.

12.1 如果接口中出現非抽象方法.會報錯

12.2 接口中的方法默認是public 型的.其它類型的修飾符,不能修飾接口中的抽象方法.

12.3 即使接口中所有的方法都是抽象方法,也不能使用 abstract 修飾.也不能用final

12.4 即使接口中所有的方法都是抽象方法,在接口中,可以聲明靜態方法.

12.5 在接口中可以有常量,e.g.:

<?

interface User{

const MAX_GRADE = 99;

function getName();

function setName($_name);

}

?>

space關鍵字給一塊代碼命名. 在這個代碼塊外部,腳本必須用操作符::加上命名空間的名稱來引用這個代碼塊. 引用靜態的類成員也是用相同的方法. 在命名空間內代碼不需要聲明命名空間, 它本身就是默認的. 這種方法比添加前綴的方法好. 你的代碼可由此變得更加緊湊和可讀.

你可能想知道是否可以建立分層的(嵌套的)命名空間. 答案是不可以. 但你可以在命名空間名稱後加上冒號, 你可以再次調用在名稱中不包含冒號的變量,函數和類. 命名空間允許存在冒號,只要不是第一個字元和最後一個字元或接着另一個冒號. 命名空間的名稱中的冒號對於PHP來說沒有任何意義, 但如果你用他們來區分邏輯上的區塊, 他們可以很好地說明你的代碼中的父子(parent-child)關係.

14. __toString()打印對象會調用它的__toString方法.

15.不能實例化的類

<?

//

//當__construct()爲public時可以實例化

class A{

private function __construct(){}

}

$a = new A();//fail

?>

15.1

//static的方法留給外部訪問.

<?

class A{

private function __construct(){}

static function getClassA(){

return "這裏是後門,可以透過這裏進入類內部..";

}

}

echo A::getClassA();

?>

15.2

//不能用new實例化的類.

//static的方法留給外部訪問.

//在方法內部返回實例.

<?

class A{

private function __construct(){

echo "this is construction

";

}

static function getClassA(){

$a = new A();

return $a;

}

}

// 看(轉 載於: 在 點 網)到這裏確實返回的是 A 的實例.但不是同一個對象.

$a1 = A::getClassA();

$a2 = A::getClassA();

echo "$a1 的類是 "_class($a1)." , $a2 是 "_class($a1); if($a1 === $a2){

echo "

$a1 $a2 指向同一對象.";

}else{

echo "

$a1 $a2 不是一個對象.";

}

//this is construction

//this is construction

篇二:php學習總結

$_GET[string] 的介紹,Isset() 和empty()的介紹,數據庫數據類型,

1.$_GET[string]的介紹

2.$_GET[string]

他和$_POST 的區別在於,當form method=“get”的時候,用來傳值,

點擊下submit後,URL轉到了接受值的php頁面。但是URL 不是這個頁面的。而是自動生成的URL。

顯示的是下面的URL:php?控件名(myname是文字方塊的控件名)=用戶輸入的值。

所以說用這個不安全。

t() 和empty()的區別

Isset()檢查變量值是不是設立了。 Check the variable is set and exists.

Empty()檢查變量值是不是空。 Check if the variable has contents.

對於empty(),空有7種可能,Null,0,‘’(空字元串),array(),false,遇到出現上面的7種情況返回true。

兩個返回的都是布爾值。

一般情況下用empty()檢查表單中戶輸入的是否是空值。

用if(!Empty($var))檢查;

。 "0",0.0

primary key 主鍵

4. MYSQL 命令:create table

命令:注意 column name column type中間沒有逗號,只是空格。

看下格式

問題:Cookie 的用法

已經試過

5. Setcookie()用於服務端在客戶端創建cookie。

裏面的兩個值是必須的。Name和value。字元串。

我自己弄的cookie。Setcookie(‘username’,‘admin’);

在IE9 中按f12 進入開發者工具中看快取的cookie資訊。

6. Cookie 的默認時間是當你關掉瀏覽器時就消失。

可以用時間戳time()+秒錶示時間。如:time()

+(7*24*30*60)表示7天存在。 讀取cookie。用$_cookie[]讀取。方括號裏面是string 的cookie名字。

例子:

7. mysql 數據類型:用於數據庫中的table下的數據的創建

8.

注意下:char()和 varchar() 的區別: Char(2)只能存一個字元。而且一定是2個。

Varchar(60)表示能存60個字元。不一定是60個。 一般用這種。

Date ,日期格式

time,時間格式

datetime表示日期和時間格式。

Dec()表示:DEC(m,n)

M表示總的位數,n表示小數點後的位數。

m is the total number of digits and n is the number of digits after the decimal point. Say, you want to store some numbers like the format 9999.9099999. Here the value of m is 11 and that of n is 7.

DATE - A date in YYYY-MM-DD format, 例如: 1973-12-30.

DATETIME -in YYYY-MM-DD HH:MM:SS 1973-12-30 15:30:00. TIMESTAMP - This looks like the previous DATETIME format, only without the hyphens between numbers; 3:30 in the afternoon on December 30th, 1973 would be stored as 19731230153000 ( YYYYMMDDHHMMSS ).

TIME - Stores the time in HH:MM:SS format.

YEAR(M) - If the length is specified as 4, YEAR can be 1901 to 2155. The default length is 4.

問題:If.。。Elseif。。。Else

else ifallows us to keep evaluating using if statements as many times as needed. 可以把elseif看做是另外一個if。

Use the statement to select one of several blocks of code to be executed. Syntax

1 if (condition)

23code to be executed if condition is true;

4

5 elseif (condition)

6

7code to be executed if condition is true;

8

9 else

10

11code to be executed if condition is false;

問題: php連接mysql()

回答:四個函數:

mysql_connect(),mysql_select_db(),mysql_query(),mysql_close().

相關語法: mysql_connect(),連接服務器。

resource mysql_connect(string $server,string$username, string$password). 返回值:指定服務器的link identifier。或者未成功就是false。

然後用這個連接mysql中的數據庫

bool mysql_select_db( string $database_name [, resource $link_identifier = NULL ] .

Mysql_select_db() 用於連接mysql服務器上的數據庫。下面的mysql_query()用來在這個數據庫中執行。前面$a=Mysql_select_db()錯誤。 mysql_query()語法:resource mysql_query( string $query [, resource $link_identifier = NULL ] ) 用於給數據庫發送命令。返回resource,是個結

篇三:PHP學習總結的一些經驗

其實我也是一樣很新的新手,上PHP100學習視頻並在論壇裏學習其實也就是一個月前的事.雖然早在8月份花過一個星期看完w3school的PHP教 程,瞭解了許多PHP知識.但始終是缺乏一個與衆多朋友學習和交流的平臺,所以一下子在幾周後又把PHP又忘得七七八八了,有幸在10月尾瞭解到了 PHP100視頻和論壇,不僅可以系統地學習下PHP,更可以和很多朋友一起學習成長這更是件好事.

在php100視頻中學到了許多,而 論壇中看帖和回帖也更讓我鞏固了學習的知識並讓我學到了很多,這不僅不會讓我又把PHP知識快速忘記(因爲工作中用是ASP,而PHP不會在工作中用,所 以忘得快),反而在取得進步的同時,我也能幫助一些人,這也是一樣是學習勝利的過程,我喜歡並享受其中.

以下是我上論壇以來的回覆總結,將不斷持續總結.希望有利於與我一樣的新手一起成長.

首先來個,題前語:

任何的學習,都需要自信,再新的新手也應該拋棄心中的恐懼,有時關鍵在於你心平下來,踏入學習後,你將慢慢化開迷惑,獲得信心,贏取自信!讓我們共同進步.

----------

==========

Undefined index問題

是執行的時候出現類似:Notice: Undefined index: action in D: on line 3 的

原因:

可詳參見此帖:#138857

是 php 配置的事情

這個錯誤是因爲 php 頁面中的變量沒有初始化而導致的!

可以透過設定搞好,

也可以在變量前面 加上一個 @ 就可以解決這個地方的問題了!

如這裏指示第三行

Notice: Undefined index: action in D: on line 3

那麼找到第3行加上@

if (@$_GET['action']=='save') {

你再執行下,發現還有提示,但行號變了,那麼你再在行號對應的未初始化的變量前加@即可解決

一勞永逸的辦法是在 中的 error配置下錯誤顯示方式

估計你裏邊的error_reporting=E_ALL

把error_reporting這個設爲

error_reporting = E_ALL & ~E_NOTICE

別忘了改動後,重啓下APCHE服務器,纔會生效

這樣,以後就不用在這種情況下加@了

-

具體參考下這個設定下

----------

==========

遇到頁面明確提示你錯誤的,並有顯示如何錯的,建議先把語句複製部分重點詞句或全部語句到百度或

google,更快速讓在你排查錯誤找到方法.其實這也是一種高效有益的學習方法,畢竟在工作中,遇到些沒

遇過的新問題,有時都需要藉助網上的資源給自己靈感和助力,本人就一天不下幾十次用百度搜尋.

如程序中遇到諸如含提示:

顯示的錯誤爲:

Parse error: syntax error, unexpected $end in D:wampwww on line 21

那麼你就可以把 syntax error, unexpected $end 作爲關鍵詞到百度搜尋,那麼你即刻可以得到助力甚

至答案.以上那句舉例的錯誤是因爲:短標籤沒有開啟.解決方法是開啟把short_open_tag短標籤

開啟,重啓服務即可

----------

==========

提示的時候,有時順便把代碼帖上帖子是必要的,這樣才能快速地在別人的幫助下問題得到解決

----------

==========

對單引號和雙引號有迷惑,大家可以看這篇文章解下惑:

----------

==========

在調試程序時,經常要用到echo 你的sql語句來,檢查傳值後,sql變成了什麼樣的情況,以便排查錯誤.

----------

==========

向數據庫表插入數據

INSERT INTO 語句用於向數據庫表添加新紀錄。

語法

INSERT INTO table_name VALUES (value1, value2,....)--此種情況是需要按你表中所有字段的順

序全部value填上!

您還可以規定希望在其中插入數據的列:

INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....) --張老師明確建

議用此種方法!

----------

==========

有人疑惑,$_POST或$GET取得時的引號問題:其實是要不要引號,單引號或雙引號都是沒有問題的.

如, $_POST[name]和$_POST['name']和$_POST["name"]都是在windows下一樣的,在linux下情況具體沒

用過,不知道,還望高手告知.

----------

==========

針對多數人的留言板課程中許多問題(如, into存不進數據問題)的總結:

1.檢查你數據庫表的結構是否正確,如id是否設爲自增

2. into語句是否正確,如單詞是否正確, into ... values ...

3.是否將`(反斜點,在1鍵前)號和'(引號)是否使用位置正確,正確的方法是:`應該放在表和字段邊,而'

是放在字元串型(或者說是非數字型)的值邊上

4.檢查你的各語句,是否在結尾將分號(;)正確結束

5.檢查你的submit表單項的name值是否你判斷的取值,如<input type="submit" name="submit"

value="提交">時,你的判斷是否提交應是 if ($_POST[submit]){...} ;當你的是<input

type="submit" name="othername" value="提交">時,你的判斷是否提交應是 if ($_POST

[othername]){...}

6.檢查你的$_POST是否大寫,當你寫成$_post是不行的,因爲$_GET,$_POST等,都是PHP系統環境的硬性用

7.用echo 輸出你的sql檢查傳值情況

8.檢查你的短標籤是否開啟

9.注意你的method是get還是post

10.檢查你的表單相關單詞或引號是否書寫正確.很多莫名其妙的問題,多是細節問題.要小心查對才能看

出來.

----------

sql語句中表名和字段名在windows的情況下是可以不加小斜點(鍵盤左上角1鍵前的那個點鍵)的,但聽說

在linux中不加會引出些問題,相容的寫法是有小斜點.

如:windows下:

$sql="select * from table "

$sql="select * from `table` "

是效果一樣的

再次重點提示是:

`(反斜點,在1鍵前)號和'(引號)使用位置,正確的方法是:`應該放在表和字段邊,而'是放在字元串型(或

者說是非數字型)的值邊

----------

==========

php100第十三講的中的翻頁顯示資訊有問題的解決方法:

因爲頁面沒有取值到URL值的page,所以在函數內的page會一直是1,所以會一直是第1頁的數據

解決方法,就是在調用函數前把page取得就好了!函數裏會把取到的page值作爲全局變量傳入函數使用的

了!

include("");

$nump=mysql_query("SELECT * FROM `test`");

$total=mysql_num_rows($nump);

//調用pageft(),每頁顯示10條資訊(使用默認的20時,可以省略此參數),使用本頁URL(默認,所

以省略掉)。

$page=$_GET[page]; //------------------------------在這裏加入這行就OK了!

_PAGEFT($total,5);

echo $pagenav;

$query=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");//---見下面 while($row=mysql_fetch_array($query)){

echo "

".$row[name]." | ".$row[sex];

}

以上的

調試方法,其實你只要學下張老師把sql語句輸出來看下,你就知道是怎麼回事了!

echo $sql="SELECT * FROM `test` limit $firstcount,$displaypg ";

$result=mysql_query($sql);

----------

==========

分頁有問題的朋友,不妨看下如下:

關於分頁,這有一篇論壇朋友的學習心得,學習下,你也許有所得:

另有一篇本人轉發上去的分頁講解:

----------

標籤:筆記 php 學習