第一篇:php課程總結
一、時間和地點:
每周四上午在F311上課。
二、課程內容:
通過這段時間的學習,我對PHP中的MySQL數據庫有了一定的理解。由于以前沒有基礎,在老師講課的過程開始有點費盡,盡量記了一些。首先學習了一些定義:MySQL是一個小型關系型數據庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站數據庫。
數據(Data)是對客觀事物的符號表示,如圖形符號、數字、字母等,數據是數據庫中存儲的基本對象。在日常生活中,人們直接用語言來描述事物;在計算機中,為了存儲和處理這些事物,就要將事物的特征抽象出來組成一個記錄來描述。之后,進行數據的編寫,知道了數據庫的發展史:人工管理階段(人力手工整理存儲數據)、文件系統階段(使用磁盤文件來存儲數據)、數據庫系統階段、關系型數據庫、高級數據庫階段、“關系-對象”型數據庫。再然后學習了數據庫的類型:
(1)純文本數據庫: 純文本數據庫是只用空格符、制表符和換行符來分割信息的文本文件。適用于小型應用,對于大中型應用來說它存在諸多限制:
? 只能順序訪問,不能進行隨機訪問。? 查找數據和數據關系或多用戶同時訪問進行寫操作時非常困難。
(2)關系數據庫:
由于純文本數據庫存在諸多局限,所以人們開始研究數據模型,設計各種類型的使用方便的數據庫。在數據庫的發展史上,最具影響的數據庫模型有:層次模型、網狀模型和關系模型。其中,關系模型是目前應用最廣泛和最有發展前途的一種數據模型,其數據結構簡單,當前主流的數據庫系統幾乎都采用關系模型。數據庫管理系統:數據庫管理系統(Database Management System)是一種操縱和管理數據庫的大型軟件,是用于建立、使用和維護數據庫,簡稱DBMS。它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。
MySQl特征:性能快捷、優化SQL語言、容易使用、多用戶支持、可移植性和開放源代碼、遵循國際標準和國際化支持、為多種編程語言提供API。
? mysql命令:mysql命令
mysql-h host_name-u user_name –ppassword ? h:當連接MySQL服務器不在同臺主機時,填寫主機名或IP地址 ? u:登錄MySQL的用戶名 ? p:登錄MySQL的密碼
? 注意:密碼如果寫在命令行的時候一定不能有空格。如果使用的系統為linux并且登陸用戶名字與MySQL的用戶名相同即可不用輸入用戶名密碼,linux默認是以root登陸,windows默認用戶是ODBC mysql程序常用命令:選定默認數據庫:use dbname;顯示所有數據庫:show databases;顯示默認數據庫中所有表:show tables;放棄正在輸入的命令:c;顯示命令清單:h;退出mysql程序:q;查看MySQL服務器狀態信息:s 接著我們講了數據庫基礎知識,在此課中我們了解了數據庫: 數據庫由一批數據構成的有序集合,這些數據被分門別類地存放在一些結構化的數
據表(table)里,而數據表之間又往往存在交叉引用的關系,這種關系使數據庫又被稱為關系型數據庫 檔案柜=數據庫 抽屜=表 文件=記錄
一、數據庫的組成以及功能
1、SQL語法組成:DML(Data Manipulation Language數據操作語言)
——查詢、插入、刪除和修改數據庫中的數據; ——SELECT、INSERT、UPDATE、DELETE等;
DCL(Data Control Language數據控制語言)
——用來控制存取許可、存取權限等; ——GRANT、REVOKE 等;
DDL(Data Definition Language數據定義語言)——用來建立數據庫、數據庫對象和定義其列
——CREATE TABLE、DROP TABLE、ALTER TABLE 等 功能函數
——日期函數、數學函數、字符函數、系統函數等
2、MysQl數據庫增刪改查:
數據庫的操作:增、刪、改、查
增 create database name、刪 drop database name、查 show databases 改 沒有修改數據庫的語句、可以修改數據庫的名字
Myisan 直接進入mysql data文件夾進行修改、Innodb 不可以改名,只能重建 幾個重要的數據庫:
Informatio_schema 存儲數據庫的各種信息用戶信息,列表信息,字符集信息等等?.Mysql用戶權限信息
Test 僅供用戶使用的測試數據庫,可以隨意使用 Cluster 服務器數據集,不可以刪除
Phpmyadmin mysql圖形管理軟件的一種web
3、數據表的操作
Use 數據庫名; 增 create table 表名(字段名 字段類型[約束條件],字段名 字段類型[約束條件]。。)
刪 drop table 表名 改
查 show tables
4、數據類型種類:
? 數值型
分為整型和浮點型
? 整型:可以由十進制和十六進制表示
整數由數字序列組成,如:1,100。
由十六進制表示方法:0x且后面加1—9和A—F 的任意數字或字母,并且0x中的X不能大寫。
? 浮點型:
浮點數由一個數字加一個小數點再加上一個數字組成。兩個數字序列不能同時為空。
數值列的完整性約束
(1)AUTO_INCREMENT 自動標識列,在需要產生唯一標志符號或者順序值時候,可用此屬性。值一般從1開始,每行增加1,在插入NULL到一個AUTO_INCREMENT列時,MySQL會插入一個比該列中當前最大值大1 的值,一個表中最多能有一個有此屬性的列。對于想使用此屬性的列應該定義為NOT NULL,并定義為PRIMARY KEY 或者定義為UNIQUE鍵。
舉例:
create table t(id int auto_increment not null primary key);(2)UNSIGNED 無符號,此屬性禁用負值,將數值的取值范圍從零開始。舉例:
create table t(num tinyint , num2 tinyint unsigned);(3)NULL和NOT NULL 默認為NULL,即插入值時沒有在此字段插入值時自動填NULL,如果指定了NOT NULL,則必須在插入值時在此字段添入值,不允許插入NULL值。(4)DEFAULT 可以通過此屬性來指定一個缺省值,即如果沒有在此列添加值,那么默認添加DEFAULT后指定值。(5)ZEROFILL 前導零填充數值類型值以達到列的顯示寬度。
舉例:
create table test2(num1 int default 1,num2 int zerofill);CHAR和VARCHAR類型:
CHAR類型和VARCHAR類型長度范圍都是0~255之間的大小。他們之間的差別在于MySQL處理存儲的方式:
CHAR把這個大小視為值的準確大小(用空格填補比較短的值)。
VARCHAR類型把它視為最大值并且只使用了存儲字符串實際上需要的字節數(增加了一個額外的字節記錄長度)。因而,較短的值當被插入一個語句為VARCHAR類型的字段時,將不會用空格填補(然而,較長的值仍然被截短)。
5、創建數據庫:
建立數據庫操作:
語法:create database 數據庫名
敘述:創建一個具有指定名稱的數據庫。如果要創建的數據庫已經存在,或者沒有創建它的適當權限,則此語句失敗。例:建立一個student庫。
mysql> create database student;創建表:建立表操作:
語法:create table 表名(? 列名1 列類型 [<列的完整性約束>], ? 列名2 列類型 [<列的完整性約束>], ?......);敘 述:在當前數據庫下新創建一個數據表。
列類型:表示該列的數據類型。例:
建立一個表school,其由兩列組成,第一列屬性為非空,并做為主鍵,并自增
? create table school(? school_id int(10)not null auto_increment primary key, ? school_name varchar(20)
?);
6、主鍵與外鍵:數據表之間的關聯/引用關系是依靠具體的主鍵(primary key)和外鍵(foreign key)建立起來的。
(1)主鍵:幫助MySQL以最快的速度把一條特點的數據記錄的位置確定下來。
主鍵必須是唯一的
主鍵應該是緊湊的,因此整數類型比較適合
主鍵
create table student(sid int not null auto_increment, name varchar(20)not null, primary key(sid));(2)外鍵:引用另外一個數據表的某條記錄。
外鍵列類型盡可能與主鍵列類型保持一致 外鍵列應該加上NOT NULL 外鍵(自動檢查外鍵是否匹配,僅適用InnoDB)
create table score(cid int not null auto_increment primary key, score int, sid int, foreign key(sid)references student(sid));
7、刪除數據庫或表操作
? 刪除表操作
語法:drop table [if exists] tab_name [,tab_name]...敘述:從數據庫中刪除給定的表。如果給出if exists 子句,則刪除不存在的表不會出錯。
? 刪除數據庫操作
語法:drop database [if exists] db_name 敘述:刪除給定的數據庫。在刪除一個數據庫后,它就永遠沒有了,因此要特別小心。如果給出if exists 子句,則刪除不存在的數據庫不會出錯。
更改表結構操作:
?
語法:alter table 表名 action;? 說明:action 可以是如下語句:
? add 列名 建表語句 [first | after 列名] 可以為表添加一列,如果沒指定first或者after,則在列尾添加一列,否則在指定列添加新列
? add primary key(列名)為表添加一個主鍵,如果主鍵已經存在,則出現錯誤
? add foreign key(列名)references 表名(列名)為表添加一個外鍵
? alter 列名 set default 默認值
可以更改指定列默認值
舉例1:
向people表中添加字段address2,類型為varchar,最大長度為100 ? alter table people add address2 varchar(100);
8、插入記錄操作
? 敘述:
如果表名后面沒寫字段名,則默認是向所有的字段添加值,另外字符串值應該用‘ ’或“ ”引號括起來
? 舉例1:向people表中添加一條記錄:
insert into people(name,age)
values(“zhangsan”,20);多表查詢—分類
? 連接查詢
? 同時涉及多個表的查詢稱為連接查詢 ? 用來連接兩個表的條件稱為連接條件
? 內連接(INNER JOIN)? 外連接
——左外聯結(LEFT JOIN)——右外聯結(RIGHT JOIN)
二、算數運算符
(1)用字符串表示的數字在任何可能便于計算的地方都被自動地轉換為數字。當執行轉換時,MySQL遵循兩個基本規則:
? 如果第一位是數字的字符串被用于一個算數運算中,那么它被轉換為這個數字的值。? 如果一個包含字符和數字混合的字符串不能被正確的轉換為數字,那么它被轉換成0。
(2)比較運算符
? 比較運算符允許我們對表達式的左邊和右邊進行比較。一個比較運算符的結果總是1(真),0(假),或是為NULL(不能確定)。? 比較運算符可以用于比較數字和字符串。數字作為浮點值比較,而字符串以不區分大小寫的方式進行比較(除非使用特殊的BINARY二進制關鍵字)
在第二章中我們學習到了數據庫的連接。
1、mysql 連接:
七劍下天山
// 第一賤:連接數據庫
? mysql_connect — 打開一個到 MySQL 服務器的連接
? mysql_pconnect — 打開一個到 MySQL 服務器的持久連接
? //resource mysql_connect([ string $server [, string $username [, string
$password [, bool $new_link [, int $client_flags ]]]]])(在php手冊中有 ? //mysql 連接:
? // mysql_connect 非持久連接,效率較低,對資源消耗小 ? // mysql_pconnect 持久連接,效率高,消耗大量的資源 ? $link=mysql_connect('localhost:3306','root','root');? var_dump($link);// 第二賤:判斷連接是否成功
? //第二賤:判斷連接是否成功//mysql_errno — 返回上一個 MySQL 操作中的錯誤信息的數字編碼
? //mysql_error — 返回上一個 MySQL 操作產生的文本錯誤信息
? //echo mysql_errno();正確返回0,錯誤返回一個正整數,輸出最近一次的mysql錯誤。
// 第三賤:設置字符集
? bool mysql_set_charset(string $charset [, resource $link_identifier ])? //mysql_set_charset — Sets the client character set ? //bool mysql_set_charset(string $charset [, resource $link_identifier ])? mysql_set_charset('utf8');// 第四賤:選擇數據庫
? //mysql_select_db — 選擇 MySQL 數據庫 ? mysql_select_db('company11');? mysql_select_db — 選擇 MySQL 數據庫 ? 說明
? bool mysql_select_db(string $database_name [, resource $ link_identifier ])? 成功時返回 TRUE,或者在失敗時返回 FALSE.? mysql_select_db()設定與指定的連接標識符所關聯的服務器上的當前激活數據庫。如果沒有指定連接標識符,則使用上一個打開的連接。如果沒有打開的連接,本函數將無參數調用 mysql_connect()來嘗試打開一個并使用之。
// 第五賤:準備并且發送sql語句
? //$sql='select * from biao';? //mysql_query($sql)//mysql_query — 發送一條 MySQL 查詢
//resource mysql_query(string $query [, resource $link_identifier ])// 第六賤: 判斷執行結果,或者遍歷結果集
? //增刪改的判斷
? $result=mysql_query($sql);(放入第五賤)? if($result && mysql_affected_rows()){ ?
echo '執行成功';? }else{ ?
echo '執行失敗,或者不存在數據';? } ? $sql=“insert into zhiyuan(name,sex,bumen)values('zhou',0,2)”;? $sql=“update zhiyuan set bumen=3 where name='小王'”;? $sql=“insert into zhiyuan(name,sex,bumen)values('小王',0,2)”;// 第七賤:萬賤歸宗 */
之后,學習了面向對象。
1、面對對象技術的基本觀點如下:
(1)客觀世界由對象組成。
(2)具有相同數據(屬性)和操作(方法)的對象可歸納成類。
(3)類可以派生出子類,子類除了繼承父類的全部特性外還可以有自己的特性(4)對象之間的聯系通過消息傳遞(可理解為方法調用)來維系。
假設m1是類Manager的一個實例(或對象),當外界要求把這個對象所 代表的那位經理的級別改變為2時,就應以下面的方式向這個對象發出一條消息: ml.ChangeLevel(2)消息傳遞
PHP的WEB技術面向對象是仿造現實對象建立的,他們也有狀態和行為。軟件對象在一個 或多個變量中維護它的狀態。變量是一個由標識符命名的數據項。對象用方法實現它的行為。方法是與一個對象相關聯的函數(子過程)。
? 對象有二個性質:狀態(state)和行為(behavior)。? 對象是一個封裝數據屬性和操作行為的實體.2、面向對象
將相關的變量和方法封裝進一個簡潔的軟件組合是一種簡單而強大的思想,它給軟件開發人員提供了兩個主要的好處:
模塊化:一個對象的源代碼可以獨立于其他對象的源代碼進行編寫和維護。另外,對象很容易地在系統中傳遞。你可以將你的自行車對象交給其他人,而它仍然會正常工作。(重構、代碼復用)
隱藏信息:對象有一個公共接口,其他對象可以使用這個接口與它通信。對象可以維護私有的信息和方法,可以在任何時候改變這些信息和方法,而不影響依賴于它的其他對象。你不需要理解你自行車使用的變速齒輪機制就能夠使用它。即是:封裝
3、類
類是一組具有相同數據結構和相同操作對象的集合。
在現實世界中,常常有相同類型的許多對象。例如,你的自行車只是世界上的許多自行車之一。用面向對象的術語來說,你的自行車對象是自行車類的一個實例。自行車有一些共有的狀態(當前的變速齒輪、當前的步調、兩個輪子)和行為(改變變速齒輪、剎車)。但是,每輛自行車狀態獨立于其他自行車狀態,也就說每輛自行車的狀態可以互不相同。
? function jia($no1,$no2){ ?
return $no1+$no2;? } ? function jian($no1,$no2){ ?
return $no1-$no2;? } ? function cheng($no1,$no2){ ?
return $no1*$no2;? } ? function chu($no1,$no2){ ?
return $no1/$no2;? } ? function max(){
? echo '我是最大值';? }
4、類的成員-字段(1)、聲明字段 name;?>(2)使用字段
? 與變量不同,使用字段要使用->操作符,而不是美元符號
– $employee=new Staff();– echo $employee->name;? 當在定義字段的類中引用字段時要使用$this關鍵字。$this表示當前類
5、、構造函數
構造函數是類中的一個特殊函數,當使用 new 操作符創建一個類的實例時,構造函數將會自動調用。
Php5中以__construct()作為構造函數。而php4中是以將和類名相同的函數作為構造函數。為了兼容php5先尋找__construct(),如果找不到再尋找以類名命名的構造函數
如果一個類沒有構造函數,則調用基類的構造函數 Class Staff { function __construct()//兩個下劃線 { echo “調用了構造函數”;} function Staff(){ echo “調用了構造函數2”;} } $employee=new Staff();? //構造方法 函數
? //特點,就是在new 的時候也就是調用這個殼的時候就進行了調用的方法
? //寫法:php4中只認識一種 類名和函數名相同的話,那個函數就是使構造方法 ? //php5中 類名和函數名相同/__construct()都是構造方法
? //注意:構造方法在類中只能有一個 不要寫多個 使用PHP4的或者PHP5的兩個相同構造方法會報重載錯誤
? //但是如果一個PHP4的一個PHP5的構造方法就不會報錯,但是邏輯有問題
? //構造方法的參數傳值,是在調用類的時候()放的就是為構造方法準備的參數 //析構方法 函數 __destruct()? //特點,析構方法是在調用完之后,自動執行 在接收類調用的變量改值的時候/或者頁面結束 自動啟動
? //聲明關鍵字 [private protected public var ]
6、析構函數
(1)析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。腳本執行結束時,php會撤銷內存中的所有對象,因此如果實例化時創建的信息都會保留到內存中,就不需要顯式的聲明析構函數。但是如果創建了不那么容易丟失的數據時(例如連接數據庫)就應當定制析構函數進行銷毀數據。Class Staff { function __construct(){ echo “調用了構造函數”;} function __destruct(){ echo “調用了析構函數,需要釋放和銷毀的“;} } $employee=new Staff();(2)類的成員-屬性_set()__set()//兩個下劃線
$this->$propname=$propvalue;
print ”ok
“;} } $model=new Test();$model->age=25;$model->title=”English“;echo ”
“;print ”age: “.$model->age.”
“;echo ”
“;print ”title: “.$model->title.”
“;?> 可用來驗證某個屬性是否存在或增加新的屬性
7、控制對類的成員訪問
(1)public :在任何位置都可以讀取和修改這個成員變量或者調用這個方法。這個修飾符在外部代碼使用,由給定類中的代碼使用,或者在擴展給定類的功能的類中使用。
(2)private : 只有這個類中的代碼才能讀取和修改私有變量或者調用私有成員函數。其他代碼、類或者擴展這個類的功能類(子類)不能使用私有條目。
(3)protected : 外部代碼與給定類不相關的其他類不能讀取或者修改使用了關鍵字protected的成員變量,也不能調用受保護的成員函數。(4)abstract 定義抽象類
(5)final 子類方法不允許覆蓋父類方法 先了解,下一章重點闡述
8、靜態類成員
當需要一些所有類對象共享的字段和方法時就需要創建一些靜態的字段和方法。Class Staff { public static $name=”靜態字段“;static function show(){
echo self::$name,”
“;} } echo Staff::$name,”
“;Staff::show();
9、常量
常量(const)即不會在類中改變的值,對于該類的任何實例化的對象來說 常量值在這些對象的整個生命周期中都保持不變 Class Staff { const CITY=“北京”;} echo Staff::CITY;
之后,學習了PHP正則表達式
1、正則表達式簡介
正則表達式是用于描述字符排列模式一種語法規則。它主要用于字符串的模式分割、匹配、查找及替換操作。到目前為止,我們前面所用過的精確(文本)匹配也是一種正則表達式。
在PHP中,正則表達式一般是由正規字符和一些特殊字符(類似于通配符)聯合構成的一個文本模式的程序性描述。
在程序語言中,通常將模式表達式(即正則表達式)包含在兩個反斜線“/”之間,如“/apple/”。用戶只要把需要匹配的模式內容放入定界之間即可。
如果使用一個沒有特殊字符的正則表達式,相當于純文本搜索,使用strstr()函數也可達到同樣的效果。
2、^ 和 $ ”^The“: 開頭一定要有”The“字符串;”of despair$“: 結尾一定要有”of despair“ 的字符串;那么, ”^abc$“: 就是要求以abc開頭和以abc結尾的字符串,實際上是只有abc匹配
”notice“: 匹配包含notice的字符串 你可以看見如果你沒有用我們提到的兩個字符(最后一個例子),就是說 模式(正則表達式)可以出現在被檢驗字符串的任何地方,你沒有把他鎖定到兩邊(開始或結束)
3、'*', '+',和 '?', * 表示出現0次或1次或多次 相當于{0,}, + 表示出現1次或多次 相當于{1,}, ? 表示出現0次或1次 相當于{0,1}, 這里是一些例子: ”ab*“: 和ab{0,}同義,匹配以a開頭,后面可以接0個或者N個b組成的字符串(”a“, ”ab“, ”abbb“, 等);”ab+“: 和ab{1,}同義,同上條一樣,但最少要有一個b存在(”ab“, ”abbb“, 等.);”ab?“:和ab{0,1}同義,可以沒有或者只有一個b;”a?b+$“: 匹配以一個或者0個a再加上一個以上的b結尾的字符串.要點, '*', '+',和 '?'只管它前面那個字符.4、[ ] 中括號括住的內容只匹配一個單一的字符
”[ab]“: 匹配單個的 a 或者 b(和 ”a|b“ 一樣);”[a-d]“: 匹配'a' 到'd'的單個字符(和”a|b|c|d“ 還有 ”[abcd]“效果一樣);一般我們都用[a-zA-Z]來指定字符為一個大小寫英文 ”^[a-zA-Z]“: 匹配以大小寫字母開頭的字符串 ”[0-9]%“: 匹配含有 形如 x% 的字符串
”,[a-zA-Z0-9]$“: 匹配以逗號再加一個數字或字母結尾的字符串
5、正則表達式的語法規則
正則表達式是主要由: ? 原子(普通字符,如英文字符)? 元字符(有特殊功用的字符)? 以及模式修正字符組成。
一個正則表達式中至少包含一個原子。
6、PHP中的正則表達式函數
在PHP中有兩套正則表達式函數庫。
? 一套是由PCRE(Perl Compatible Regular Expression)庫提供的。PCRE庫使用和perl相同的語法規則實現了正則表達式的模式匹配,其使用以“preg_”為前綴命名的函數。
? 另一套是由POSIX(Portable Operation System interface)擴展庫提供的。POSIX擴展的正則表達式由POSIX 1003.2定義,一般使用以“ereg_”為前綴命名的函數。
? 兩套函數庫的功能相似,執行效率稍有不同。一般而言,實現相同的功能,使用PCRE庫的效率略占優勢。
7、、正則表達式的拆分
1split()和spliti()函數原型:
? array split(string $pattern,string $string[,int $limit])本函數返回一個字符串數組,每個單元為$string經正則表達式$pattern作為邊界分割出的子串。如果設定了$limit,則返回的數組最多包含$limit個單元。而其中最后一個單元包含了$string中剩余的所有部分。Spliti是split的忽略大小版本。
之后,學習了文件系統處理。
open()打開文件或者URL $file=fopen('1.txt','r');//只讀模式打開 //r 只能讀取不能寫入
//r+ 增強的讀寫模式 表示以只讀模式打開,但是仍然可以進行部分的寫入操作 //w 寫模式 打開文件的時候,原有內容會被清空 如果文件不存在就新建一個文件,再打開
//w+ 增強的讀寫模式
//a 追加模式(寫)不會清空原有文件而是在源文件的基礎上進行累加 不存在也可以新建
//a+ 增強的追加模式(讀寫)/x異或模式 文件存在就報錯,不存在就創建 //x+增強的異或模式 //b 打開二進制文件
1、文件的打開
2、文件的刪除
//rename('1.txt','1.exe');/ /刪除
rmdir('C')//刪除空目錄 ?>
3、什么是文件系統
就是對系統或者服務器中的文件進行操作,增刪改查,文件的上傳和下載
4、文件系統能做什么?
a)文件緩存的應用 b)配置文件的應用
c)FTP站點主要是FTP下載站 d)站點頁面的靜態化 e)文件的上傳和下載。
5、文件下載:查找 header
header('content-type:image/gif');//告訴瀏覽器你的文件描述
header('Content-Disposition: attachment;filename=”baidu.gif"');//告訴瀏覽器文件的大小
header('content-length'.filesize('baidu.gif'));//顯示內容
readfile('baidu.gif');?>
三、個人收獲
學習PHP的過程做一下概括:
(1)熟悉HTML/CSS/JS等網頁基本元素,完成階段可自行制作完整的網頁,對元素屬性達到熟悉程度
(2)理解動態語言的概念,運做機制,熟悉PHP語法
(3)學習如何將PHP與HTML結合起來完成簡單動態頁面
(4)接觸MYSQL,開始設計數據庫程序
(5)不斷鞏固,摸透大部分PHP常用函數,并可理解OOP,MYSQL優化,以及模板
(6)完成一個功能齊全的動態站點
通過這段時間的學習,自己受益匪淺,知道了很多關于PHP的東西,學會了很多內容。在這堂課的學習過程中我認真聽講,上機認真練習,遇到難題,自己思考與探索,不斷地尋求進步,請教老師和同學,雖然上半年沒有學習這門課程,不過老師講課非常仔細,然后同學們一步步自己跟著老師做,還是能跟得上,等著以后自己做畢業設計也有一定的幫助。
第二篇:PHP課程總結
PHP課程總結
這個學期開設的PHP課程是由聶老師上的,老師很詳細的跟我們介紹PHP的語法,然后用實例跟我們講解,每節課老師都盡心盡責,可是無奈班上的人聽的還是寥寥無幾,真正掌握的可能也只有雷sir和老胡,不知道是什么原因,但我始終覺得學習是自己的事情,如果不聽,那可能是真的有自己的想法,就像您說的,能救咱就救救不了咱們也沒有辦法!
讓我們掌握知識最多的時候應該是做網頁的時候,在寫網頁代碼的時候,才是我們真正將實際只是運用在實踐中的時候,雖然網頁制作的知識是我們上個學期學的知識,但是,真正的運用和熟悉起來卻是這個時候,同樣,老師教了很多東西給我們,可是我們卻并沒有將他們運用起來,或許說,不知道該在哪里運用起來,我們平常的實踐非常的有限,沒有建站的機會,更沒有建站的經歷,所以我們基本上學了就忘記了,沒有實踐,學了就忘,慢慢的就進入了惡性循環,就覺得學了也不知道該干嘛,所以慢慢自己開始懈怠。慢慢的也就覺得沒有什么意思了。
到后半程的課程老師也覺得沒意思了,然后開始讓我們自由活動,只要不打游戲,就行了,其實這也是好事,都是成年人了,都知道對自己負責,沒有了聽課的任務后,也好把時間更好的用在自己的事情上,讓自己更高效的做自己的事情由何嘗不可呢。在后半段的課程我基本上就在做自己的事情了,對PHP也沒有花太多的精力。硬要說總結的話,我只能說,學習PHP首先要熟悉HTML/CSS/JS等網頁基本元素,完成階段可自行制作完整的網頁,對元素屬性達到熟悉程度;然后理解動態語言的概念,運做機制,熟悉PHP語法;學習如何將PHP與HTML結合起來完成簡單動態頁面;再接觸MYSQL,開始設計數據庫程序;不斷鞏固,摸透大部分PHP常用函數,并可理解OOP,MYSQL優化,以及模板;最后完成一個功能齊全的動態站點。
對于我們這樣的PHP新手學習PHP基礎知識時只要大致了解了就行,不要徹底的弄明白PHP基礎知識。那要到什么時候去深究PHP基礎知識呢?等我們入門后。也就是我們會使用PHP開發一個完整的網站后。你就會發現前面的PHP基礎知識哪些是在我們的項目中非常重要的,哪些又不是那么經常用的。這個時候你多完成幾個完整的項目,這時你對PHP基礎知識的了解會更加清晰。
第三篇:《PHP應用程序技術》課程教學大綱
四川水利職業技術學院信息工程系
課程教學大綱
《PHP應用程序技術》教學大綱
一、課程目的
通過本課程的學習,課堂上先結合案例講解PHP的基本語法等知識,再通過上機實踐和課后練習,進行實際案例的開發。使學生能夠更加全面地理解PHP語言的語法結構和運行原理,并能熟練地運用PHP和MySQL等知識進行項目開發。
二、課程性質和任務
本課程屬于計算機軟件開發專業的一門計算機編程語言基礎課程,主要學習PHP程序設計語言的知識和應用,具體包括PHP概述、HTML基礎、PHP語法基礎、流程控制結構、PHP數組、PHP網站開發、MySQL數據庫技術和PHP、MySQL數據庫編程技術、面向對象技術、PHP安全與加密技術和B2C電子商務網站開發等。
三、教學要求
通過本課程學習,力求讓學生掌握PHP編程方法,同時由于PHP語言可運行在跨平臺操作系統上,在當前網絡開發應用中非常廣泛,是學生進行網站建設、Web應用開發非常重要的工具。
四、教學內容和課時安排
第1章 PHP開發環境搭建(10學時)1.PHP功能簡介 2.程序運行環境的搭建 3.安裝Apache與PHP 4.Apache的啟動與關閉、Apache的配置文件 5.PHP的配置文件
6.幾種綜合網絡服務器系統的 7.幾種開發工具簡介
第2章 PHP基礎語法(12學時)1.語言構成與工作原理
2.常量與變量 3.運算符和關鍵字 4.流程控制語法 5.表達式 6.特殊的全局變量 7.文件包含 四川水利職業技術學院信息工程系
課程教學大綱
8.PHP的數據類型 9.數據類型間的轉換 10.函數的定義與使用 11.PHP常用函數第
3章 PHP中類的應用(10學時)1.PHP中面向對象程序設計的 應用 2.定義屬性和方法 3.類的引用、擴展與繼承 4.類的使用 5.接口與抽象類
第4章 文件系統與文本數據(8學時)1.PHP中的目錄操作 2.PHP中的文件操作 3.文件的上傳與下載 4.字符類型的特殊性 5.字符的顯示與格式化 6.常見字符串的操作 7.正則表達式 8.字符操作的注意事項
第5章 數組操作與數據結構(10學時)1.一維數組與多維數組 2.常用的數組操作 3.數組索引與鍵名的操作 4.數組的排序
第6章 錯誤與異常(8學時)1.PHP中常見錯誤類型 2.PHP程序調試策略 3.使用PHPEclipse進行PHP 4.錯誤的處理 5.異常處理的原理 6.擴展的異常處理類 四川水利職業技術學院信息工程系
課程教學大綱
第7章 PHP與表單(12學時)1.HTML表單簡介 2.表單數據的接收
3.常用表單數據的驗證方法 4.URL編碼解碼函數 5.JavaScript程序設計基礎 6.PHP動態生成JavaScript 7.JavaScript中調用PHP程序 8.JavaScript和PHP綜合實例
第8章 PHP與MySQL數據庫編程技術 1.MySQL數據庫安裝與配置 2.如何創建一個數據庫與表 3.數據的操作
4.使用PHP操作MySQL數據庫 5.使用PHP獲取MySQL數據庫的信息 第9章 B2C電子商務網站開發實訓 1.需求分析 2.系統設計 3.數據庫設計 4.系統實現 5.網站后臺開發 6.網站前臺開發 7.會員中心模塊開發
五、考核方式
本課程考核采用綜合考核方式,即課程的考試成績由平時成績、實驗成績和期末的理論考核成績組成。其中平時成績強調平時的出勤、課堂紀律、課堂表現和作業,占總成績的10%;設計、實驗成績占總成績的30%;期末的理論考核采取開卷方式,占總成績的60%。
六、參考教材
《PHP程序設計案例教程》 陳建國編著 機械工業出版社 《PHP從入門到精通》 明日科技編著 清華大學出版社
七、其它(說明)四川水利職業技術學院信息工程系
課程教學大綱
教學大綱僅供老師作為授課安排的參考,具體情況應由老師根據學校條件、學生狀況而定。
第四篇:PHP基礎總結
1、在HTML嵌入PHP腳本有三種辦法:
<scriptlanguage=“php”>
//嵌入方式一
echo(“test”);
</script>
<?
//嵌入方式二
echo“<br>test2”;
?>
<?php
//嵌入方式三
echo“<br>test3”;
?>
還有一種嵌入方式,即使用和Asp相同的標記<%%>,但要修改PHP.ini 相關配置,不推薦使用。
2、PHP注釋分單行和多行注釋,和java注釋方式相同。
<?
//這里是單行注釋
echo“test”;
/*
這里是多行注釋!可以寫很多行注釋內容
*/
?>
注意不要有嵌套注釋,如/*aaaa/*asdfa*/asdfasdfas*/,這樣的注釋會出現問題。
3、PHP主要的數據類型有5種,integer,double,string,array,object。
4、函數內調用函數外部變量,需要先用global進行聲明,否則無法訪問,這是PHP與其他程序語言的一個區別。事例代碼:
<?
$a=1;
functiontest(){
echo$a;
}
test();//這里將不能輸出結果“1”。
functiontest2(){
global$a;
echo$a;
}
test2();//這樣可以輸出結果“1”。
?>
注意:PHP可以在函數內部聲明靜態變量。用途同C語言中。
5、變量的變量,變量的函數
<?
//變量的變量
$a=“hello”;
$$a=“world”;
echo“$a$hello”;//將輸出“helloworld”
echo“$a${$a}”;//同樣將輸出“helloworld”
?>
<?
//變量的函數
functionfunc_1(){
print(“test”);
}
functionfun($callback){
$callback();
}
fun(“func_1”);//這樣將輸出“test”
?>
6、PHP同時支持標量數組和關聯數組,可以使用list()和array()來創建數組,數組下標從0開始。如:
<?
$a[0]=“abc”;
$a[1]=“def”;
$b[“foo”]=13;
$a[]=“hello”;//$a[2]=“hello”
$a[]=“world”;//$a[3]=“world”
$name[]=“jill”;//$name[0]=“jill”
$name[]=“jack”;//$name[1]=“jack”
?>
7、關聯參數傳遞(&的使用),兩種方法。例:
<?
//方法一:
functionfoo(&$bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo($str);
echo$str;//output:ThisisaString,andsomethingextra
echo“<br>”;
//方法二:
functionfoo1($bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo1($str);
echo$str;//output:ThisisaString,echo“<br>”;
foo1(&$str);
echo$str;//output:ThisisaString,andsomethingextra
?>
8、函數默認值。PHP中函數支持設定默認值,與C++風格相同。
<?
functionmakecoffee($type=“coffee”){
echo“makingacupof$type.n”;
}
echomakecoffee();//“makingacupofcoffee”
echomakecoffee(“espresso”);//“makingacupofespresso”
/*
注意:當使用參數默認值時所有有默認值的參數應該在無默認值的參數的后邊定義。否則,程序將不會按照所想的工作。
*/
functiontest($type=“test”,$ff){//錯誤示例
return$type.$ff;
}
9、PHP的幾個特殊符號意義。
$變量
&變量的地址(加在變量前)
@不顯示錯誤信息(加在變量前)
->類的方法或者屬性
=>數組的元素值
?:三元運算子
10、include()語句與require()語句
如果要根據條件或循環包含文件,需要使用include()。
require()語句只是被簡單的包含一次,任何的條件語句或循環等對其無效。
由于include()是一個特殊的語句結構,因此若語句在一個語句塊中,則必須把他包含在一個語句塊中。
<?
//下面為錯誤語句
if($condition)
include($file);
else
include($other);
//下面為正確語句
if($condition){
include($file);
}else
{
include($other);
}
?>
第五篇: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.1private 不可以動態綁定。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.:
interfaceUser{
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
n”;
}
static function getClassA(){
$a = new A();
return $a;
}
}
// 看到這里確實返回的是 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
//$a1 的類是 A , $a2 是 A
//$a1 $a2 不是一個對象.?>
15.3
//不能用new實例化的類.
//static的方法留給外部訪問.
//在方法內部返回實例.
//定義靜態屬性保證這個實例能被靜態方法調用.
//增加判斷部分.
class A{
private static $a = null;
private function __construct(){}
static function getClassA(){
if(null == self::$a){
self::$a = new A();
}
return self::$a;
}
}
// 看到這里確實返回的是 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 不是一個對象.”;
}
//$a1 的類是 A , $a2 是 A
//$a1 $a2 指向同一對象.?>