php學習筆記總結
php學習筆記總結
篇一:php學習總結
除錯/*………*/ //…….#..........
插入時考慮清楚欄位型別避免插入後出現缺值,亂碼
@ 遮蔽錯誤or die 條件顯示
以前學習php類的總結:
1.php中不能過載,但是能用子類覆蓋父類的方法名稱來實現新的過載
1.1 在子類中呼叫父類的覆蓋部分可以使用 父類名稱::方法名稱();
2.final 只能定義類和方法,不能使用final定義成員屬性,因為final是常量的意思,在php裡定義常量使用的是define函式
2.1 final關鍵字標記的類不能被繼承
2.2 final關鍵字標記的方法不能被子類重寫
3.const是一個定義常量的關鍵字,在php中定義常量使用的是define()函式,但是在類裡定義常量使用的是“const” 這個關鍵字
3.1在程式中不能修改它的值。
3.2 訪問const 修飾的成員屬性要使用類名,在本類的方法裡使用“self”關鍵字,但不使用"$"符號,也不能使用物件來訪問。
4.static關鍵字可以描述類中的成員屬性和成員方法
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);
}
?>
13.Namespace關鍵字給一塊程式碼命名. 在這個程式碼塊外部,指令碼必須用運算子::加上名稱空間的名稱來引用這個程式碼塊. 引用靜態的類成員也是用相同的方法. 在名稱空間內程式碼不需要宣告名稱空間, 它本身就是預設的. 這種方法比新增字首的方法好. 你的程式碼可由此變得更加緊湊和可讀.
你可能想知道是否可以建立分層的(巢狀的)名稱空間. 答案是不可以. 但你可以在名稱空間名稱後加上冒號, 你可以再次呼叫在名稱中不包含冒號的變數,函式和類. 名稱空間允許存在冒號,只要不是第一個字元和最後一個字元或接著另一個冒號. 名稱空間的名稱中的冒號對於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;
}
}
// 看(轉 載於:www.zaIdian.cOM 在 點 網)到這裡確實返回的是 A 的例項.但不是同一個物件.
$a1 = A::getClassA();
$a2 = A::getClassA();
echo "$a1 的類是 ".get_class($a1)." , $a2 是 ".get_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 不是這個頁面的--1.php。而是自動生成的URL。
顯示的是下面的URL:php?控制元件名(myname是文字框的控制元件名)=使用者輸入的值。
所以說用這個不安全。
3.Isset() 和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 if....elseif...else 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:wampwwwadd.php on line 3 的
原因:
可詳參見此帖:http://bbs.php100.com/read.php?tid=15843&page=1#138857
是 php 配置的事情
這個錯誤是因為 php 頁面中的變數沒有初始化而導致的!
可以透過設定PHP.INI搞好,
也可以在變數前面 加上一個 @ 就可以解決這個地方的問題了!
如這裡指示第三行
Notice: Undefined index: action in D:wampwwwadd.php on line 3
那麼找到第3行加上@
if (@$_GET['action']=='save') {
你再執行下,發現還有提示,但行號變了,那麼你再在行號對應的未初始化的變數前加@即可解決
一勞永逸的辦法是在 php.ini 中的 error配置下錯誤顯示方式
估計你裡邊的error_reporting=E_ALL
把error_reporting這個設為
error_reporting = E_ALL & ~E_NOTICE
別忘了改動後,重啟下APCHE伺服器,才會生效
這樣,以後就不用在這種情況下加@了
-
具體參考下這個設定下http://edu.codepub.com/2009/0617/6463.php
----------
==========
遇到頁面明確提示你錯誤的,並有顯示如何錯的,建議先把語句複製部分重點詞句或全部語句到百度或
google,更快速讓在你排查錯誤找到方法.其實這也是一種高效有益的學習方法,畢竟在工作中,遇到些沒
遇過的新問題,有時都需要藉助網上的資源給自己靈感和助力,本人就一天不下幾十次用百度搜索.
如程式中遇到諸如含提示:
顯示的錯誤為:
Parse error: syntax error, unexpected $end in D:wampwww estlist.php on line 21
那麼你就可以把 syntax error, unexpected $end 作為關鍵詞到百度搜索,那麼你即刻可以得到助力甚
至答案.以上那句舉例的錯誤是因為:短標籤沒有開啟.解決方法是開啟php.ini把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第十三講的page.PHP中的翻頁顯示資訊有問題的解決方法:
因為頁面沒有取值到URL值的page,所以在函式內的page會一直是1,所以會一直是第1頁的資料
解決方法,就是在呼叫函式前把page取得就好了!函數里會把取到的page值作為全域性變數傳入函式使用的
了!
include("conn.php");
$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);
----------
==========
分頁有問題的朋友,不妨看下如下:
關於分頁,這有一篇論壇朋友的學習心得,學習下,你也許有所得:
另有一篇本人轉發上去的分頁講解:
----------