一、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 ?>