一、PHP基礎文法 變數到數組
<?php //phpinfo(); /* 變數 $a=1;//不分配空間 echo "\$a=".$a; echo "<br/>"; var_dump($a);// 結果為NULL echo "hello worrld";*/ /* int型最大能表示多大 echo "<br/>".PHP_INT_SIZE; echo "<br/>".PHP_INT_MAX;//(2的31次方-1) 31:4*8-1個符號位 $a=-2147483648; echo "<br/>".$a; var_dump($a);//超過int型 範圍 則會變為float類型*/ /* 布爾值 $d=0.0; if(!$d){ echo "!!"; }*/ /* 浮點數 浮點數精度是14(從左邊開始,第一個非0就是精度的開始)*/ /*字元型 單引號和雙引號區別 $d=90; $d1="$d"; $d2='$d'; echo $d1; echo $d2;*/ //$a=7/5.1; //echo $a; # === 包括類型也相等 /*$a=2; $b=2.0; if($a!=$b) { echo"!="; } if($a!==$b)# !== 包括類型也不相等 { echo "!=="; }*/ /* &&和||只要前面的一個為真假即不執行後一個 and 和 or 則不是 or的優先順序比=低 所以 $e=false or true; //結果為false,因為此時$e先賦值為FALSE var_dump($e); $f=true and false;//結果為true,因為此時$e先賦值為true var_dump($f);*/ /*字串拼接 $a="1";$b="2"; $c=$a.$b; */ /* 物件類型運算子 class Dog{} $dog=new Dog; var_dump($dog instanceof Dog); $a=3; echo $a++*3;//9*/ /*常量 define("TAX_INT",21); #$TAX_INT=9; echo TAX_INT; const TAX_TWO=0.3; echo "<br/>".TAX_TWO; */ /* #require 'other.php';//不會判斷是否重複,可能導致重複輸出 require_once 'other.php';// 先判斷是否有重複引入 #include '111other.php'; #include_once 'other.php'; #require 和include區別: #include如果出現了錯誤會繼續執行, #而require則會終止程式 #echo "22"; $i=2; $result=getNum($i);//傳值,也可以傳地址& echo $result;*/ /*全域變數 global $a=1; function get() { global $a;//可作用於局部內了 $a++; } get(); echo $a; */ /*數組初始化 //$array=array(1.2,12,"wrwe",true); //echo count($array); $arr=array("log"=>"daomul","mima"=>123); echo count($arr)."<br/>"; foreach($arr as $key=>$val) { echo $key."=".$val."<br/>"; } $arr2=array(""=>"32",1=>"fdsf",23,23); echo $arr2[""]."<br/>"; echo $arr2[2]."<br/>"; #使用true作為下標,即是1 ,false :0; null:"" $arr3=array(123.4=>"arr3"); echo $arr3[123]."<br/>"; #顯示詳細數組資訊 print_r($arr3); echo "<br/>"; var_dump($arr3); #數組可以動態增長 $arr4=array(2,3); echo $arr4[1]."<br/>"; $arr4[2]='11 22 333 444'; #echo $arr4[2]; #字串的拆分 explode $arr=explode(" ",$arr4[2]); print_r($arr); foreach($arr as $key=>$val)# (要迴圈的數組 as 數組下標變數) { echo "<br/>$key=>$val"; } echo "<br/>".$arr[1]; unset($arr[1]);#銷毀數組元素後,關鍵字下標不會被重新填充組合 print_r($arr);*/ /*數組運算 疊加 $a=array("a"=>12,"b"=>23); $b=array("a"=>21,"c"=>43); $a=$a+$b; print_r($a);*/ ?>
二、數組
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <h1> 同一個介面傳輸參數</h1> <?php /* 在 input中加 value="<?php echo $grades; ?>" 仿造百度搜尋 */ error_reporting(E_ALL ^ E_NOTICE); $grades=$_REQUEST['grade']; $grade=explode(" ",$grades); $all=0; foreach($grade as $k=>$v) { $all+=$v; } ?> <form action="test.php" method="post"> <input type="text" name="grade" value="<?php echo $grades; ?>"/> <input type="submit" value="start"/> </form> <?php echo "總的:".$all; ?> </body></html>
三、靜態變數
<?php class Child { public static $num=0; public $name; function __construct($name) //只有new之後才能調用 { $this->name=$name; } //靜態變數不能用this來訪問 public function join() { self::$num+=1; //可以: Child::$num echo $this->name."you"; } } $child1=new Child("k"); $child1->join(); $child1=new Child("a"); $child1->join(); $child1=new Child("b"); $child1->join(); echo "<br/>".Child::$num; //類外只能是 類名::變數, //類內就能兩種?>
四、繼承/封裝/多態/抽象
/*class Child { public static $num=0; public $name; //構造方法 function __construct($name) //只有new之後才能調用 { $this->name=$name; } //靜態變數不能用this來訪問 public function join($ifee) { self::ifee+=1; //可以: Child::$num echo $this->name."you"; } } $child1=new Child("k"); $child1->join(); $child1=new Child("a"); $child1->join(); $child1=new Child("b"); $child1->join(); echo "<br/>".Child::$num; //類外只能是 類名::變數, //類內就能兩種*/ //靜態方法不能採用非靜態變數,只能使用非靜態變數 // 成員函數之間相互調用,需要用 $this->text(); //繼承 //1、子類只能繼承一個父類 // 如果想多重繼承可以考慮通過多次繼承: /*class A{} class B extends A{} class C extends B{}*/ //2、父類中的構造方法,在創造一個子類的對象執行個體的時候不會預設自動調用 //3、 子類中調用父類的方法 //父類名::方法名(); / parent::方法名(); parent小寫 //覆蓋: # 子類的方法和父類的方法名稱和參數個數完全一樣,但不要求參數名相同 # 但是修飾符可以不同,但是子的範圍〉=父類範圍 # 父類是private則不能覆蓋 /*class A{ function F(){ echo " 父類在此!<br/>"; } } class B extends A{} class C extends B{ function F(){ echo "調用了父類了<br/>"; parent::F(); A::F(); } } $C1=new C(); $C1->F();*/ //抽象類別:父類中不需要被執行個體化,只讓子類繼承,也可以被調用裡面的;達到代碼複用 #抽象類別 abstract class name{} #抽象方法 abstract public cry(); #抽象類別不一定也有抽象方法 #類包含抽象方法則必須為抽象類別 #子類繼承抽象父類,則必須為抽象類別或者實現繼承的所有,所有!方法 //介面:interfacde 介面{//屬性 //方法} # 只能定義規範,讓類去實現介面 ,不能自己實現, # class c implements 介面{} # 介面不能被執行個體化/介面能繼承其他多個介面/不能不為public # 一個類實現了一個介面,必須把介面以及其繼承的介面的方法全部實現 # (1 多個平級的類都要實現某個功能,只是實現方式不同,沒有繼承關係, #(2 專案經理定規範,讓其他程式員實現 /*interface Stu { const A=90; public function add(); } interface Stu2{} class MyStu implements Stu,Stu2 { public function add() { echo "dddd".Stu::A."<br/>"; } } $mystu=new MyStu(); $mystu->add(); echo "OK".Stu::A; #獲得介面中的常量*/ //final 使類中的方法不被覆蓋 # final 不能修飾成員屬性 /*class A { final public function get($salary) { return $salary*3; } } class B extends A { public function get($sal) { return $sal*2; } } $b=new B(); $b->get("21"); #Cannot override final method A::get() */ //const常量 # 要賦初始值;不能後面賦值;不能加$等修飾符 # self::A ; 類名::A ;介面名::A; 等方式獲得常量A的值
五、檔案操作以及錯誤處理
<?php // 檔案操作 /*處理錯的方式1 if(!file_exists("file1.txt")) { echo "not here"; exit(); } else { $fp=fopen("file1.txt","r"); echo "檔案已開啟"; fclose($fp); }*/ /* 處理錯的方式2 if(!file_exists("a.txt")) { die("wenjianbucunzai"); } else {} echo "end";*/ /*處理錯的方式1 file_exists("b.txt") or die("zhen de "); echo "end"; */ //定義錯誤函數 /*function my_error($error,$err_message) { echo "<font size='5' color='red'> $error </front><br/>";//2 //echo "錯誤資訊是:".$err_message; exit(); } //改變系統預設的錯誤處理函數(“使用者自己定義的錯誤輸出函數”,“錯誤類型”) set_error_handler("my_error",E_WARNING); $fp=fopen("aa.txt",'r');*/ //錯誤觸發器 function my_error3($error,$err_message) { echo "錯誤號碼:".$error; } function my_error4($error,$err_message) { echo "big big!"; } set_error_handler("my_error3",E_USER_WARNING);// set_error_handler("my_error4",E_USER_ERROR);//致命錯誤,不繼續執行 $age=140; if($age>120) { //調用觸發器的時候指定錯誤層級 trigger_error("輸入的數字過大!",E_USER_ERROR); //trigger_error("輸入的數字過大!",E_USER_WARNING); //exit(); } echo "ok";?>
六、錯誤記錄檔
<?php //錯誤記錄檔 php.ini 中的error_log的配置 function my_error5($error,$err_meaasge) { $err_info="錯誤資訊:".$error."--".$err_meaasge; //echo time(); //輸出 當前日期 // 調整時區:預設時期是UTC和中國差8小時 PRC 或者Asia/Chongqing date_default_timezone_set("PRC"); echo date("Y-m-d G-i-s"); echo "<br/>".$err_info; #將錯誤存入系統檔案中 error_log("時間是:".date("Y-m-d G-i-s")."-".$err_info."\r\n",3,"myerror.txt");//3個參數 } set_error_handler("my_error5",E_USER_WARNING); $i=1; if($i<2) { trigger_error("輸入的數字過小",E_USER_WARNING); }?>
七、捕獲異常
<?php //處理異常 #注意事項:異常拋出之後,得代碼不會被繼續執行 #拋出異常之後如果沒用處理則會報錯 try { addUser("1a"); } catch(Exception $e) { echo "失敗資訊:".$e->getMessage();//getLine() #可以繼續拋出 throw $e; #也可以頂一個頂級異常處理 # $i=8/0 fopen("a.txt","r") 很難拋出異常 } function addUser($user) { if($user=="a") { echo "登陸成功!"; } else { throw new Exception("使用者名稱錯誤!"); } } /*#頂級異常處理 function my_error() { echo "我是頂級異常處理!".e->getMeaasge(); } set_error_handler("my_error");*/?>