一、PHP基礎語法 變量到數組
1 <?php 2 //phpinfo(); 3 4 /* 變量 5 $a=1;//不分配空間 6 echo "\$a=".$a; 7 echo "<br/>"; 8 var_dump($a);// 結果為NULL 9 echo "hello worrld";*/ 10 11 /* int型最大能表示多大 12 echo "<br/>".PHP_INT_SIZE; 13 echo "<br/>".PHP_INT_MAX;//(2的31次方-1) 31:4*8-1個符號位 14 $a=-2147483648; 15 echo "<br/>".$a; 16 var_dump($a);//超過int型 范圍 則會變為float類型*/ 17 18 /* 布爾值 19 $d=0.0; 20 if(!$d){ 21 echo "!!"; 22 }*/ 23 /* 浮點數 24 浮點數精度是14(從左邊開始,第一個非0就是精度的開始)*/ 25 26 /*字符型 27 28 單引號和雙引號區別 29 30 $d=90; 31 $d1="$d"; 32 $d2='$d'; 33 echo $d1; 34 echo $d2;*/ 35 36 //$a=7/5.1; 37 //echo $a; 38 39 # === 包括類型也相等 40 /*$a=2; 41 $b=2.0; 42 if($a!=$b) 43 { 44 echo"!="; 45 } 46 if($a!==$b)# !== 包括類型也不相等 47 { 48 echo "!=="; 49 }*/ 50 51 /* &&和||只要前面的一個為真假即不執行后一個 52 and 和 or 則不是 53 or的優先級比=低 所以 54 $e=false or true; //結果為false,因為此時$e先賦值為FALSE 55 var_dump($e); 56 $f=true and false;//結果為true,因為此時$e先賦值為true 57 var_dump($f);*/ 58 59 /*字符串拼接 60 $a="1";$b="2"; 61 $c=$a.$b; 62 */ 63 64 /* 對象類型運算符 65 66 class Dog{} 67 $dog=new Dog; 68 var_dump($dog instanceof Dog); 69 70 $a=3; 71 echo $a++*3;//9*/ 72 73 /*常量 74 define("TAX_INT",21); 75 #$TAX_INT=9; 76 echo TAX_INT; 77 78 const TAX_TWO=0.3; 79 echo "<br/>".TAX_TWO; */ 80 81 /* 82 #require 'other.php';//不會判斷是否重復,可能導致重復輸出 83 require_once 'other.php';// 先判斷是否有重復引入 84 85 #include '111other.php'; 86 #include_once 'other.php'; 87 88 #require 和include區別: 89 #include如果出現了錯誤會繼續執行, 90 #而require則會終止程序 91 92 #echo "22"; 93 94 $i=2; 95 $result=getNum($i);//傳值,也可以傳地址& 96 echo $result;*/ 97 98 /*全局變量 global 99 $a=1; 100 function get() 101 { 102 global $a;//可作用於局部內了 103 $a++; 104 } 105 get(); 106 echo $a; 107 */ 108 109 /*數組初始化 110 //$array=array(1.2,12,"wrwe",true); 111 //echo count($array); 112 113 $arr=array("log"=>"daomul","mima"=>123); 114 echo count($arr)."<br/>"; 115 foreach($arr as $key=>$val) 116 { 117 echo $key."=".$val."<br/>"; 118 } 119 120 $arr2=array(""=>"32",1=>"fdsf",23,23); 121 echo $arr2[""]."<br/>"; 122 echo $arr2[2]."<br/>"; 123 124 #使用true作為下標,即是1 ,false :0; null:"" 125 126 $arr3=array(123.4=>"arr3"); 127 echo $arr3[123]."<br/>"; 128 129 #顯示詳細數組信息 130 print_r($arr3); echo "<br/>"; 131 var_dump($arr3); 132 133 #數組可以動態增長 134 $arr4=array(2,3); 135 echo $arr4[1]."<br/>"; 136 $arr4[2]='11 22 333 444'; 137 #echo $arr4[2]; 138 139 #字符串的拆分 explode 140 $arr=explode(" ",$arr4[2]); 141 print_r($arr); 142 143 foreach($arr as $key=>$val)# (要循環的數組 as 數組下標變量) 144 { 145 echo "<br/>$key=>$val"; 146 } 147 148 echo "<br/>".$arr[1]; 149 unset($arr[1]);#銷毀數組元素后,關鍵字下標不會被重新填充組合 150 print_r($arr);*/ 151 152 /*數組運算 疊加 153 $a=array("a"=>12,"b"=>23); 154 $b=array("a"=>21,"c"=>43); 155 $a=$a+$b; 156 print_r($a);*/ 157 158 159 ?>
二、數組
1 <html> 2 <head> 3 <meta http-equiv="content-type" content="text/html;charset=utf-8"> 4 </head> 5 <body> 6 <h1> 同一個界面傳輸參數</h1> 7 8 <?php 9 /* 在 input中加 value="<?php echo $grades; ?>" 仿造百度搜索 */ 10 error_reporting(E_ALL ^ E_NOTICE); 11 $grades=$_REQUEST['grade']; 12 $grade=explode(" ",$grades); 13 $all=0; 14 foreach($grade as $k=>$v) 15 { 16 $all+=$v; 17 } 18 ?> 19 20 <form action="test.php" method="post"> 21 <input type="text" name="grade" value="<?php echo $grades; ?>"/> 22 <input type="submit" value="start"/> 23 </form> 24 25 <?php 26 echo "總的:".$all; 27 ?> 28 </body> 29 </html>
三、靜態變量
1 <?php 2 3 class Child 4 { 5 public static $num=0; 6 public $name; 7 function __construct($name) //只有new之后才能調用 8 { 9 $this->name=$name; 10 } 11 //靜態變量不能用this來訪問 12 public function join() 13 { 14 self::$num+=1; //可以: Child::$num 15 echo $this->name."you"; 16 } 17 } 18 19 $child1=new Child("k"); 20 $child1->join(); 21 $child1=new Child("a"); 22 $child1->join(); 23 $child1=new Child("b"); 24 $child1->join(); 25 echo "<br/>".Child::$num; 26 //類外只能是 類名::變量, 27 //類內就能兩種 28 ?>
四、繼承/封裝/多態/抽象
1 /*class Child 2 { 3 public static $num=0; 4 public $name; 5 //構造方法 6 function __construct($name) //只有new之后才能調用 7 { 8 $this->name=$name; 9 } 10 //靜態變量不能用this來訪問 11 public function join($ifee) 12 { 13 self::ifee+=1; //可以: Child::$num 14 echo $this->name."you"; 15 } 16 } 17 18 $child1=new Child("k"); 19 $child1->join(); 20 $child1=new Child("a"); 21 $child1->join(); 22 $child1=new Child("b"); 23 $child1->join(); 24 echo "<br/>".Child::$num; 25 //類外只能是 類名::變量, 26 //類內就能兩種*/ 27 28 29 30 //靜態方法不能采用非靜態變量,只能使用非靜態變量 31 // 成員函數之間相互調用,需要用 $this->text(); 32 33 //繼承 34 35 //1、子類只能繼承一個父類 36 // 如果想多重繼承可以考慮通過多次繼承: 37 /*class A{} 38 class B extends A{} 39 class C extends B{}*/ 40 41 //2、父類中的構造方法,在創造一個子類的對象實例的時候不會默認自動調用 42 //3、 子類中調用父類的方法 43 //父類名::方法名(); / parent::方法名(); parent小寫的 44 45 //覆蓋: 46 # 子類的方法和父類的方法名稱和參數個數完全一樣,但不要求參數名相同 47 # 但是修飾符可以不同,但是子的范圍〉=父類范圍 48 # 父類是private則不能覆蓋 49 /*class A{ 50 function F(){ 51 echo " 父類在此!<br/>"; 52 } 53 } 54 class B extends A{} 55 class C extends B{ 56 function F(){ 57 echo "調用了父類了<br/>"; 58 parent::F(); 59 A::F(); 60 } 61 } 62 $C1=new C(); 63 $C1->F();*/ 64 65 //抽象類:父類中不需要被實例化,只讓子類繼承,也可以被調用里面的;達到代碼復用 66 67 #抽象類 abstract class name{} 68 #抽象方法 abstract public cry(); 69 #抽象類不一定也有抽象方法 70 #類包含抽象方法則必須為抽象類 71 #子類繼承抽象父類,則必須為抽象類或者實現繼承的所有,所有!方法 72 73 74 //接口:interfacde 接口{//屬性 //方法} 75 # 只能定義規范,讓類去實現接口 ,不能自己實現, 76 # class c implements 接口{} 77 # 接口不能被實例化/接口能繼承其他多個接口/不能不為public 78 # 一個類實現了一個接口,必須把接口以及其繼承的接口的方法全部實現 79 # (1 多個平級的類都要實現某個功能,只是實現方式不同,沒有繼承關系, 80 #(2 項目經理定規范,讓其他程序員實現 81 /*interface Stu 82 { 83 const A=90; 84 public function add(); 85 } 86 interface Stu2{} 87 88 class MyStu implements Stu,Stu2 89 { 90 public function add() 91 { 92 echo "dddd".Stu::A."<br/>"; 93 } 94 } 95 $mystu=new MyStu(); 96 $mystu->add(); 97 echo "OK".Stu::A; #獲得接口中的常量*/ 98 99 //final 使類中的方法不被覆蓋 100 # final 不能修飾成員屬性 101 /*class A 102 { 103 final public function get($salary) 104 { 105 return $salary*3; 106 } 107 } 108 class B extends A 109 { 110 public function get($sal) 111 { 112 return $sal*2; 113 } 114 } 115 $b=new B(); 116 $b->get("21"); #Cannot override final method A::get() */ 117 118 //const常量 119 # 要賦初始值;不能后面賦值;不能加$等修飾符 120 # self::A ; 類名::A ;接口名::A; 等方式獲得常量A的值
五、文件操作以及錯誤處理
1 <?php 2 3 // 文件操作 4 /*處理錯的方式1 5 if(!file_exists("file1.txt")) 6 { 7 echo "not here"; 8 exit(); 9 } 10 else 11 { 12 $fp=fopen("file1.txt","r"); 13 echo "文件已打開"; 14 fclose($fp); 15 }*/ 16 17 /* 處理錯的方式2 18 if(!file_exists("a.txt")) 19 { 20 die("wenjianbucunzai"); 21 } 22 else 23 {} 24 echo "end";*/ 25 /*處理錯的方式1 26 27 file_exists("b.txt") or die("zhen de "); 28 echo "end"; 29 */ 30 31 //定義錯誤函數 32 /*function my_error($error,$err_message) 33 { 34 echo "<font size='5' color='red'> $error </front><br/>";//2 35 //echo "錯誤信息是:".$err_message; 36 exit(); 37 } 38 39 //改變系統默認的錯誤處理函數(“用戶自己定義的錯誤輸出函數”,“錯誤類型”) 40 set_error_handler("my_error",E_WARNING); 41 $fp=fopen("aa.txt",'r');*/ 42 43 //錯誤觸發器 44 45 function my_error3($error,$err_message) 46 { 47 echo "錯誤號:".$error; 48 } 49 function my_error4($error,$err_message) 50 { 51 echo "big big!"; 52 } 53 set_error_handler("my_error3",E_USER_WARNING);// 54 set_error_handler("my_error4",E_USER_ERROR);//致命錯誤,不繼續執行 55 $age=140; 56 if($age>120) 57 { 58 //調用觸發器的時候指定錯誤級別 59 trigger_error("輸入的數字過大!",E_USER_ERROR); 60 //trigger_error("輸入的數字過大!",E_USER_WARNING); 61 //exit(); 62 } 63 echo "ok"; 64 ?>
六、錯誤日志
1 <?php 2 3 //錯誤日志 php.ini 中的error_log的配置 4 5 function my_error5($error,$err_meaasge) 6 { 7 $err_info="錯誤信息:".$error."--".$err_meaasge; 8 //echo time(); 9 //輸出 當前日期 10 // 調整時區:默認時期是UTC和中國差8小時 PRC 或者Asia/Chongqing 11 12 date_default_timezone_set("PRC"); 13 14 echo date("Y-m-d G-i-s"); 15 echo "<br/>".$err_info; 16 17 #將錯誤存入系統文件中 18 error_log("時間是:".date("Y-m-d G-i-s")."-".$err_info."\r\n",3,"myerror.txt");//3個參數 19 } 20 set_error_handler("my_error5",E_USER_WARNING); 21 $i=1; 22 if($i<2) 23 { 24 trigger_error("輸入的數字過小",E_USER_WARNING); 25 } 26 ?>
七、捕獲異常
1 <?php 2 3 //處理異常 4 #注意事項:異常拋出之后,得代碼不會被繼續執行 5 #拋出異常之后如果沒用處理則會報錯 6 try 7 { 8 addUser("1a"); 9 } 10 catch(Exception $e) 11 { 12 echo "失敗信息:".$e->getMessage();//getLine() 13 #可以繼續拋出 throw $e; 14 #也可以頂一個頂級異常處理 15 # $i=8/0 fopen("a.txt","r") 很難拋出異常 16 } 17 18 function addUser($user) 19 { 20 if($user=="a") 21 { 22 echo "登陸成功!"; 23 } 24 else 25 { 26 throw new Exception("用戶名錯誤!"); 27 } 28 29 } 30 31 /*#頂級異常處理 32 function my_error() 33 { 34 echo "我是頂級異常處理!".e->getMeaasge(); 35 } 36 set_error_handler("my_error");*/ 37 38 ?>