php學習筆記

1、字符串
1.    單引號不能識別插入的變量以及任何轉義序列(定義純字符串用單引號)
2.    雙引號不能識別轉義的單引號
3.    <<< KKK
KKK;//必須頂格
這個能夠用來輸出HTML而無需轉義
 
 
 
2、訪問字符串
1.===(表示等同操做符則false與0不一樣)而==(表示相等操做符則false與0等價)
2.strpos函數用於返回一個字符串中要查找的子字符串出現的第一個位置,失敗則返回FALSE(用===來判斷與false相等)
3.換行用<br>  \n很差使
4. 
5
6.$varname=’dd’; $$varname=5;($dd=5)
7.常量不須要$符號,定義常量define(‘CONTAST’,10);
echo CONTAST;
8.算數運算符用於字符串時,會把字符串轉換成數字,若是字符串頭含有數字則等於該數字,不然爲0
9.有實際值的變量或表達式前加@可抑制錯誤
10.反向雙引號` `之間的命令當作服務器端的命令來執行,表達式的值就是命令的執行結果
10.數組遍歷:
   a. foreach($arr as $key=>$value)
     echo $key.’==’.$value;
   b. while($arr=each($a))
//each遍歷一次以後數組指針到數組末尾,若想再次訪問這個數組須要reset($a)才能夠繼續遍歷
     echo $arr[‘key’].’=’.$arr[‘value’];
c. $ip=’192.168.1.126’;
//list只能接受索引數組,數組中的元素個數必須與list參數個數一致且按索引下標的順序遍歷
list($a,$b,$c,$d)=explode(‘.’,$ip);
echo $d;
   d. while(list($key,$value)=each($arr))//這種模式比foreach效率高
     echo $key.’=’.$value;
11.gettype($a)  獲取變量a的類型
   settype($a,’type’)   把變量a的類型變爲type類型
   isset($a)   判斷a變量是否存在
   empty($a)  判斷變量a是否爲空//isset和empty檢查用戶正確填寫表單
   unset($a)   銷燬a變量
12.exit完全結束PHP程序
 
PHP6的新特性:
這些特性包括:
    集成OpCache(OPcache經過對PHP的opcode進行緩存和優化,能夠提升PHP程序的執行速度)
    改善對64位環境的支持
    支持Unicode
    清理內部API
    提高代碼質量,作到Warning-Free
    改善OPcodes、編譯器、運行時
    JIT編譯器(LibJIT?)
    支持Annotation(註解?)
    命名自變量(Named argument)
    不一樣等級的類型提示
    支持HTTP 2.0協議(可能會使用nghttp2,避免重複造輪)
    可靠、友好的RNG API
    新的Getter/Setter
    C++用法
    新的加密擴展
    捆綁PECL的http庫
 
13.函數能夠在聲明以前調用也能夠在聲明以後調用且不分大小寫
14.要想使用全局變量需用global定義該變量且在執行語句以前
 
fun_num_args() //獲取參數個數
func_get_arg()//獲取指定位置的參數的值
fun_get_args() //獲取參數數組(數組爲索引數組)
*想要使用字符串函數最好把字符串所有變成小寫的在進行處理
 
 
 
15.strtok()函數
<?php
$string = "Hello world. Beautiful day today.";
$token = strtok($string, " ");//首次調用時,傳入須要分割的字符串
while ($token !== false)
{
echo "$token<br>";
$token = strtok(" ");//以後就不須要傳入所要分割的字符串,由於它知道本身的位置(指針)
}
?>
16.str_replace(find,replace,search)
在search中查找find並把search中的find替換爲replace
17.正則表達式
.表示匹配除(\n)外的任意一個字符{當在一個字符類的開始或末尾使用.時,它失去了匹配意義僅僅表示符號.} 
*表示一個模式出現0次或屢次 (放在後面)
+表示一個模式出現至少一次(放在後面)
?表示一個子模式爲可選
net|com其中|表示一個選擇,匹配net或者com
()括弧裏的子模式被精確匹配
{2,}某一個模式重複至少兩次
[^a-z]匹配除了a~z的任意一個字符
^[a-z]$匹配只含有小寫字母的字符串的一個字符
PHP正則表達式必須包含在單引號中,若是在雙引號引用中使用\須要用4個\,使用$須要用\\\$
匹配標點符號時應在其前加\用來轉義
18.分割字符類型必定的字符串用explode,若是分割字符類型不定的字符串用split   //儘可能用explode由於效率高於split
//對於單個能夠正則表達式的卻選擇多個字符串函數是不明智的
19.被include或require引用的文件命名爲.inc.php
若是但願文件是純HTML或者文本並不執行PHP代碼可使用readfile()函數
20.面向對象:
a. private定義的屬性和方法不能被子類繼承,protected則能夠被繼承可是隻能在子類內部使用,public被繼承後能夠在類外使用。子類繼承父類後,若對父類的function函數進行了重載覆蓋,可以使用parent::function()仍可輸出父類函數的值。
b. 類中操做某個屬性可使用$this指針:如$this->attribute;
c.可使用__set()和__get()兩個函數來檢查和設置任何屬性的值。
d.final關鍵字能夠用來禁止方法和類被繼承
e.PHP只容許一個子類繼承(extends)一個父類,不容許一個子類繼承多個父類(即多重繼承),但容許一個父類能夠多個子類,可是可使用接口(implements)來解決這個問題。一個子類只能繼承一個父類,可是能夠實現多個接口且必須實現接口中指定的方法,不然將出現致命錯誤。
21.類中:變量命名所有小寫,函數命名使用駝峯首字母大寫
22.const定義常量和static定義靜態方法均可以在不初始化對象的狀況下就能進行使用(注意,不能再靜態方法中使用$this由於該方法可能沒有引用的對象的實例)
A.類中定義常量:const PI=3.14;  訪問常量:類名::PI
B.定義:static function C($input){
          return input*input;
}
訪問靜態方法:echo 類名::C(8);
23.instanceof可用於檢查一個類的類型,是否被繼承是否實現了接口
24.類中定義的函數參數類型若是被指定爲B類實例變量,那麼參數傳值時若是傳入了A類實例,將發生錯誤,可是若是參數類型被指定爲A類實例變量且B類繼承了A類,那麼參數傳值若是傳了B類實例,則不會發生錯誤,由於B類繼承了A類。
25.若想使用__call($function,$arr)重載方法,則function方法沒必要實現也可。
26.__toString()可用來打印方法返回值
  Reflection()也可用來打印出類的詳細信息(間接調用__toString)
  $class=new ReflectionClass(「class」);
  echo ‘<pre>’.$class.‘</pre>’;
27.一個典型的web服務器運行流程   
 
28.MySQL數據庫權限授予:(操做之間用逗號隔開)
  A. grant all on  *  to 用戶名 identified by ‘密碼’ with grant option; //授予該用戶操做全部數據庫的權限
  B. revoke all privileges ,grant from 用戶名;   //撤銷該用戶的全部權限
  C. grant 操做 on 數據庫 .* to 用戶@localhost identified by ‘密碼’;//受權一個用戶帳號、密碼以及對本地數據庫的操做(操做爲usage時該用戶沒有任何權限)
D. revoke 操做 on 數據庫 .* from 用戶名; //撤銷該用戶對某一數據庫的一些操做
28.MySQL默認存儲引擎MyISAM, 列類型大二進制blob可用於存儲圖像或聲音數據。
 
SQL語句中使用like進行匹配,%表示任意個字符,_表示一個字符
29.MySQL數據庫的DML操做:
A.insert into table_name(column1,column2 )values (value1,value2);
//有括號時能夠選擇特定幾列進行插入,沒有括號時默認所有插入
 或 insert into table_name set column1=value1,column2=value2;
B.select table1.column1,table1.column2 from table1 ,table2 where table1.column3=table2.column1;//兩個表之間有關聯時
C.select table1.column1,table1.column2 ,table1.column3 from table1 left join table2 on table1.column3=table2.column3;
//左關聯在兩個表擁有共同column3的條件(on字句中)下,若是column2沒有匹配行則column2=NULL
select table1.column1,table1.column2  from table1 left join table2  using(column3) where  table1.column2  is  null;
//左關聯在兩個表擁有共同column3下,若是table1.column3爲null則打印出來
D.select  c.column1  from  table1 as c , table2 as b where c.column2=b.column2;//利用別名進行查詢
select c1.name, c2.name, c1.city  from  table as c , table as b where c1.city=c2.city and c1.name!= c1.name;
//利用別名對同一個表中的多行進行查詢
select  name, city  from  table  order  by  name  asc; //第一個表進行升序查詢(降序用desc)
 
E.select  id, avg(amount)  from  table  group  by  id having avg(amount) > 50;
//從table中查詢每一個id的大於50的平均值(若是僅僅使用avg()則查詢的是全部列的平均值)
select name from table limit 2,3; //返回查詢結果的第2條到第三條
 
 
30.update table set column=value;//更新表中一列的值
31.alter  table  c1  modify  name  char (70) not null;
 
 
 
用trim函數去除左右兩邊的特殊字符,再用get_magic_quotes_gpc()函數來檢查是否自動加了引號,若是沒有用addslashes()來進行過濾
 
 
    mysql_real_escape_string($string); //若是要將該字符串存入數據庫,須要進行處理轉義(預防數據庫攻擊)
32.PHP代碼鏈接MySQL數據庫
@ $db=new mysqli_connect(「主機名」,」用戶名」,「登陸密碼」,「數據庫名」);
If(mysqli_connect_errno()){
echo 「錯誤提示」;
exit;}
A:
執行查詢操做:
 
 
 
獲取數據行數:
 取出數據庫元素方法:
1.
 
2.
 
3.
 
 
B:執行插入語句:
 
當使用insert,update和delete操做時,需用affected_rows函數用於獲取插入行數
 
C:使用prepare語句能夠防止sql語句注入和提升執行速度
 
sssd的意思是後面四個變量對應的分別是字符串,字符串,字符串,雙精度。
D:PEAR MBD2 抽象層(後期學習)
 
安全性與電子商務
 
 
33. 時間問題
a.獲取當前時間
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’);
b.獲取前一天此時時間
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
34. 計算歲數:
$day=25;   $month=5;   $year=1992;
    $bdaytime=mktime(0,0,0,$month,$day,$year);
    $nowtime=time();
    $ageunix=$nowtime-$bdaytime;
    $age=floor($ageunix/(360*24*60*60));
    echo $age;
35.圖形圖像
 
A.建立圖像
$image =imagecreatetruecolor($width,$height);   //建立一個空白的背景圖像(圖像標識符)
$blue=imagecolorallocate($image,0,0,64);  //爲圖像分配顏色
imagefill($image,0,0,$blue); //圖像添加背景顏色(2,3參數是起始座標)
imagestring($image,4,50,150,’text’,$blue);//爲圖像添加字符串(2文本字體大小,3,4文本起始位置)
B.輸出圖像
Header(‘Content-type:image/png’); //告訴瀏覽器發送的是圖像
//Header()函數的另外一個做用是http重定向,告訴瀏覽器加載一個不一樣的頁面而不是被請求的那個(若是在調用該函數前,http已經發送那麼這個函數將不會執行)
imagepng($image); //調用該函數輸出png圖像
C.清理
Imagedestroy($image);
 
36.會話
A.開始一個會話
    session_start(); //在腳本執行的最開始處添加,開始一個會話
B.註冊一個會話
    $_ESSION[‘var’]=5; //
C.使用一個會話
   session_start();      //開始一個會話
   $_SESSION[‘var’]  //獲取會話變量
   //在使用對象做爲會話變量時,必須在session_start()語句前,先實現對對象類的定義
  if(isset($_SESSION[‘var’])){}  //用來判斷一個會話變量是否存在
D.註銷一個會話
unset($_SESSION[‘var’]);   //註銷一個會話變量
session_destroy();          //註銷一個會話
37.其餘特性
    A.eval($string); //把字符串當作PHP代碼執行
B.mysql_query($query) or die( $string||$function); //鏈接數據庫失敗,給出字符串提示或者調用一個函數(die與exit同樣)
C.$serail=serialize($object||$array); //該函數能夠將一個對象或數組進行序列化爲字符串(若是序列化對象,應該在使用該語句前對列進行實例化)
    $new=unserialize($object||$array);  //反序列化函數
D.獲取PHP拓展部件以及每一個部件中的拓展函數
 
 
E.識別當前腳本運行全部者
echo get_current_user();
 
    G.    獲取腳本最近修改時間
        date_default_timezone_set(‘PRC’);
        echo date(‘y-m-d H:i:s’,getlastmod());
H.    ini_set(‘instruct’,’value’)  //臨時修改php_ini中的值
      ini_get(‘instruct’);   //獲取php_ini中的值
I.show_source(‘var.php’);  //對PHP代碼進行高亮顯示
相關文章
相關標籤/搜索