PHP快速入门总结
2017-11-29 10:16
375 查看
PHP快速开发网页和后台数据的热门语言,核心是LAMP:L指Linux,A指Apache,M指MySQL,P就是Php 。建议使用phpstorm工具开发Php,建议使用PHPstudy工具集成Apache和MySQL。格式:<?php ?> 参考手册:http://www.w3school.com.cn/php/php_variables.asp
一 基本数据类型8种
四种标量类型:boolean (布尔型逻辑型)、int (整型)、float (浮点型, 也称作double)、 string (字符串)
两种复合类型:array (数组)、object (对象)
两种特殊类型:resource (资源)、 null (NULL)
二 运算符7种
算数运算符:+、-、*、/、%、++、-- 加减乘除余数加加减减
字符串运算符: .
赋值运算符:+=、-=、*=、/=、%=、.=
比较运算符:> 、>= 、< 、<= 、== 等于、!= 不等于、<> 不等于、=== 值或类型全等于、!== 值或类型不等于
逻辑运算符:and 与、or 或、xor 异或、&& 与、|| 或、! 非、1>0?'true':'false' 三元运算
执行运算符:``、shell_exec()
错误抑制符:@
三 流程控制
关键字:break、continue、exit/die、goto
四 变量和函数
1.变量:$ 符号开头,其后是变量的名称,对大小写敏感!(全局变量global $ 、 &$)
2.常量:请用define(name,value,nocase) 函数-它的三个参数:(类常量const)
name名称必选,value值必选,nocase可选-是否对大小写不敏感 默认是false敏感!
魔术常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __METHOD__
3.许多预定义变量都是“超全局变量”,函数或方法中无需执行global $variable; 就可访问它们:
$GLOBALS ———管理全部变量的数组,变量名就是它的键名
$_SERVER———$_SERVER['REMOTE_ADDR']客户端IP地址 $_SERVER['REQUEST_METHOD']get/post方法
$_REQUEST——可以处理_POST/_GET/_COOKIE,不安全
$_POST ————返回数组print_r($_POST['name']),post最安全
$_GET ————返回数组, 乱码处理:发送时urlencode()接收时urldecode()
$_FILES ————返回数组为上传文件的名称类型大小等信息
$_ENV ————建议不开启
$_COOKIE ———敏感信息要加密
$_SESSION———禁止cookie后仍可用session
4.函数:函数名以字母或下划线开头(而非数字)。函数名对大小写不敏感!
function myName() {
被执行的函数代码;//默认return null;
}
5.自定义函数:
递归函数-函数不能成为死循环
变量函数-md5(123);$a='md5';echo $a(123);
回调函数-传入的参数就是函数名:call_user_func(函数名);call_user_func_array(函数名,参数组);
匿名函数-没有直接的名称:$a=function(){};
可变参数函数-没有参数要自己判断:func_num_args();func_get_args();func_get_arg(index);
五 数组
表达式:$arr=array(); //数组打印 print_r($arr);
静态索引数组:$arr=array(1,false,'小明'); //$arr=range(low,high,step);
静态关联数组:$arr=array('name'=>'小明','age'=>8); //$a='ok';$arr=compact('a');
动态数组创建:$arr=array();$arr[]=1;$arr[]=true;$arr['name']='Lily';
二维数组创建:$arr=array();$a1=array();$a1[]=123;$arr[]=$a1;
增删改查:增改查$arr[index]; 删除unset($arr[index]);
数组遍历:foreach、list、each
六 面向对象 __construct构造方法 __destruct析构方法
其它包含文件引用:include "xx.php";//没找到文件警告 require "xx.php";//没找到文件警告并退出
面向对象三大特征:封装、继承、多态 。 (抽象)
注意:final修饰的类不能被继承,final修饰的方法不能被重写覆盖,final不能修饰变量。
七 打印日志和错误异常处理
八 HTTP响应
http请求常见返回码:200成功、302重新定向、304无修改取缓存、404找不到页面…
设置header
cookie和session
页面抓取curl
文件下载
文件上传
九 MySQL MySQLi扩展
mysqli批量操作、事务控制(原子性、一致性、隔离性、持久性)、预处理技术:
十 过滤器
<?php
header("Content-type:text/html;charset=utf-8");
//数值范围过滤器
$var=30;
$int_options = array(
"options"=>array(
"min_range"=>0, //最小值
"max_range"=>256 //最大值
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) {
echo("不是一个合法的整数");
} else {
echo("是个合法的整数");
}
//自定义函数过滤器
function convertSpace($string){
return str_replace("_", ".", $string);
}
$string = "www_xx_com";
echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));
//表单传值过滤器
$filters = array(
"name" => array(
"filter_has_var"=>FILTER_SANITIZE_STRING),
"age" => array(
"filter_has_var"=>FILTER_VALIDATE_INT,
"options"=>array(
"min_range"=>1,
"max_range"=>120)),
"email"=> FILTER_VALIDATE_EMAIL
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"]) {
echo("年龄必须在 1 到 120 之间。<br>");
}elseif(!$result["email"]){
echo("E-Mail 不合法<br>");
}else{
echo("输入正确");
}
?>
一 基本数据类型8种
四种标量类型:boolean (布尔型逻辑型)、int (整型)、float (浮点型, 也称作double)、 string (字符串)
两种复合类型:array (数组)、object (对象)
两种特殊类型:resource (资源)、 null (NULL)
二 运算符7种
算数运算符:+、-、*、/、%、++、-- 加减乘除余数加加减减
字符串运算符: .
赋值运算符:+=、-=、*=、/=、%=、.=
比较运算符:> 、>= 、< 、<= 、== 等于、!= 不等于、<> 不等于、=== 值或类型全等于、!== 值或类型不等于
逻辑运算符:and 与、or 或、xor 异或、&& 与、|| 或、! 非、1>0?'true':'false' 三元运算
执行运算符:``、shell_exec()
错误抑制符:@
三 流程控制
关键字:break、continue、exit/die、goto
if (条件) { true 时执行的代码; } elseif (条件) { true 时执行的代码; } else { false 时执行的代码; } switch (expression) { case label1: if expression = label1执行 break; default: 没有符合条件后执行 } for ($x=0; $x<=10; $x++) { echo "打印的数字是:$x <br>"; } while (条件为真) { var_dump('打印执行的详细代码'); }
四 变量和函数
1.变量:$ 符号开头,其后是变量的名称,对大小写敏感!(全局变量global $ 、 &$)
2.常量:请用define(name,value,nocase) 函数-它的三个参数:(类常量const)
name名称必选,value值必选,nocase可选-是否对大小写不敏感 默认是false敏感!
魔术常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __METHOD__
3.许多预定义变量都是“超全局变量”,函数或方法中无需执行global $variable; 就可访问它们:
$GLOBALS ———管理全部变量的数组,变量名就是它的键名
$_SERVER———$_SERVER['REMOTE_ADDR']客户端IP地址 $_SERVER['REQUEST_METHOD']get/post方法
$_REQUEST——可以处理_POST/_GET/_COOKIE,不安全
$_POST ————返回数组print_r($_POST['name']),post最安全
$_GET ————返回数组, 乱码处理:发送时urlencode()接收时urldecode()
$_FILES ————返回数组为上传文件的名称类型大小等信息
$_ENV ————建议不开启
$_COOKIE ———敏感信息要加密
$_SESSION———禁止cookie后仍可用session
4.函数:函数名以字母或下划线开头(而非数字)。函数名对大小写不敏感!
function myName() {
被执行的函数代码;//默认return null;
}
5.自定义函数:
递归函数-函数不能成为死循环
变量函数-md5(123);$a='md5';echo $a(123);
回调函数-传入的参数就是函数名:call_user_func(函数名);call_user_func_array(函数名,参数组);
匿名函数-没有直接的名称:$a=function(){};
可变参数函数-没有参数要自己判断:func_num_args();func_get_args();func_get_arg(index);
五 数组
表达式:$arr=array(); //数组打印 print_r($arr);
静态索引数组:$arr=array(1,false,'小明'); //$arr=range(low,high,step);
静态关联数组:$arr=array('name'=>'小明','age'=>8); //$a='ok';$arr=compact('a');
动态数组创建:$arr=array();$arr[]=1;$arr[]=true;$arr['name']='Lily';
二维数组创建:$arr=array();$a1=array();$a1[]=123;$arr[]=$a1;
增删改查:增改查$arr[index]; 删除unset($arr[index]);
数组遍历:foreach、list、each
foreach ($arr as $key=>$val) { print_r('键:'.$key.'值:'.$val.'<p>'); }
六 面向对象 __construct构造方法 __destruct析构方法
其它包含文件引用:include "xx.php";//没找到文件警告 require "xx.php";//没找到文件警告并退出
面向对象三大特征:封装、继承、多态 。 (抽象)
<?php class Cat{ public $name;// 每个封装对象个体使用-实例变量 public static $num;//需全局共享使用-静态变量 //封装数据3个访问控制符:默认 全局访问public、本类子类访问protected、本类访问private //可自定义set()get()方法访问protected private属性,不建议使用魔术方法__set()、__get() public function __construct($name) { Cat::$num+=1;//Cat::self::静态访问的方式 $this->name=$name;//$this指当前对象 不能访问静态变量 echo '构造方法(可参)实例时就立刻调用:'.$this->name.'<p>';//构造方法 } public function __destruct() { echo "析构方法(无参)释放资源先进后出:".$this->name.'<p>';//垃圾回收 } public static function getNum() { return Cat::$num;//静态方法只能访问静态变量 } } $cat1=new Cat('小白'); $cat2=new Cat('小花'); echo $cat1->name.$cat2->name.Cat::$num.$cat1->getNum().'<p>'; ?>
class Animal { public $name; public function eat($name){ $this->name=$name; echo $this->name."在动物园吃东西<p>"; } } class Cat extends Animal{ //继承用extends单继承,解决代码复用问题,默认不自动调用父类构造方法,父类允许有的子类也有,子类可以新增或重写覆盖 public function __construct(){ Animal::eat('构造方法');//Animal::parent::子类访问父类的方式 } } $cat1=new Cat(); $cat1->eat('小白猫'); $cat2=new Cat(); $cat2->eat('小花猫');
class Test{ //多态的一种实现是重载,重载函数指多个函数名称相同,参数个数和类型不同 //php5默认不支持直接重载函数相同名称函数,须用魔术方法__call()但不建议使用 public function tests(){ echo "错误的重载函数参数0<p>"; } public function tests($a){ echo "错误的重载函数参数1<p>"; } } $t=new Test(); $t->tests(); $t->tests(1);
abstract class Animal{ abstract function eat();//abstract只能一致修饰抽象类(不能实例化)和抽象方法(无函数体) } interface IUSB{ const A=90;//interface可以实现多个接口可以有属性,常量const须赋值且不被改变不修饰控制符 function start_();//interface只能修饰接口(不能实例化),public修饰方法(无函数体) } class Cat extends Animal implements IUSB{ function eat(){ echo "抽象类方法继承<p>";//抽象类的方法必须全部被继承(extends继承单个) } function start_(){ echo "接口方法实现<p>";//接口的方法必须全部被实现(implements实现多个","隔开) } } $c=new Cat(); $c->eat(); $c->start_(); echo IUSB::A;
注意:final修饰的类不能被继承,final修饰的方法不能被重写覆盖,final不能修饰变量。
七 打印日志和错误异常处理
//①打印日志到文件 error_log(date("Y-m-d G:i:s")."时间日志文件"."\n",3,"xxx.txt"); //②if条件判断文件错误 if(!file_exists('xxx.txt')){ echo '文件不存在'; exit(); }else{ $f=fopen('xxx.txt','r'); fclose($f); } //③使用die判断文件错误 file_exists('xxx.txt') or die('文件不存在'); //④自定义错误处理器和错误触发器 function error_function($errno,$errmsg){ echo "<font color='red'>错误号:".$errno."</font>信息:".$errmsg;//自定义方法 } set_error_handler('error_function',E_USER_NOTICE);//处理器 if(!file_exists('xxx.txt')){ trigger_error('文件不存在',E_USER_NOTICE);//触发器 } //⑤捕获异常 function find($name){ if($name=="xiaomi"){ throw new Exception("成功"); }else{ throw new Exception("查找失败"); } } try{ find('xiaomi');//捕获到异常后下面代码不继续执行 }catch(Exception $e){ echo '捕获:'.$e->getMessage(); }catch(Exception2 $e2){ echo '捕获2:'.$e2->getMessage(); }
八 HTTP响应
http请求常见返回码:200成功、302重新定向、304无修改取缓存、404找不到页面…
设置header
header('content-type:text/html;charset=utf-8');//中文乱码处理 header("Location:x.php");//立即跳转html/php文件 header("Refresh:3;url=http://localhost/demo/x.php");//间隔3秒后跳转 header("Expires:-1");//页面过期时间为之前时间则不使用缓存一 header("Cache-Control:no_cache");//no-cache,must-revalidate,no-store http1.1告诉客户端不使用缓存二 header("Pragma:no-cache");//兼容http1.0告诉客户端不使用缓存三
cookie和session
<?php setcookie("name","xx",time()+3600);//保存1小时cookie setcookie("password",md5("123"),time());//不保存cookie setcookie("age","1",time()-1);//删除cookie print_r($_COOKIE);//获取cookie------------------------ ?> <?php session_start(); $_SESSION['var1']="中华人民共和国CHN"; echo "<a href='p2.php'>下一页</a><p>";//客户端支持cookie echo "<a href='p2.php?".SID."'>下一页</a>";//客户端不支持cookie,1.url中传递PHPSESSID 2.url中拼接SID 3.配置文件session.use_trans_sid = 1 ?> //p2.php <?php session_start(); echo "session:".$_SESSION['var1'];//获取session---------- ?>
页面抓取curl
<?php //post("https://www.baidu.com/",null,false);//get或post function post($url, $data,$isPost) { //页面抓取-初使化init方法 $ch = curl_init(); //指定URL curl_setopt($ch, CURLOPT_URL, $url); //设定请求后返回结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($isPost) { //声明使用POST方式来进行发送,不是POST不调用!!! curl_setopt($ch, CURLOPT_POST, 1); //使用POST发送数据字符或数组,不是POST不调用!!! curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } //忽略证书 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //忽略header头信息 curl_setopt($ch, CURLOPT_HEADER, 0); //设置超时时间 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //发送请求 $output = curl_exec($ch); //关闭curl curl_close($ch); //返回数据 print_r($output); } ?>
文件下载
<?php /**文件下载:$file_name文件名 $file_path文件夹路径 */ function fileDown($file_path,$file_name){ $file_name=iconv("utf-8","gb2312",$file_name);//转码中文文件名 $file_path=$_SERVER['DOCUMENT_ROOT'].$file_path.$file_name;//指定虚拟机绝对路径 file_exists($file_path) or die("文件不存在!");//判断文件是否存在 $file=fopen($file_path,"r");//如果存在打开文件 r:读 w+:写 a+:加 $file_size=filesize($file_path);//获取文件大小 header("Content-type:application/octet-stream");//说明是一个文件流 header("Content-Length:".$file_size);//说明文件大小 header("Content-Disposition:attachment;filename=".$file_name);//说明文件名 $buffer=1024; while(!feof($file)){//!feof()文件没有结束 $filedata=fread($file,$buffer);//fwrite($file,"写入") echo $filedata;//返回数据 } fclose($file);//关闭文件 } //file_put_contents($_SERVER['DOCUMENT_ROOT']."/xx.txt","\r\n写入数据");//写入文件 //file_get_contents($_SERVER['DOCUMENT_ROOT']."/xx.txt");//读取文件 //if(!copy($_SERVER['DOCUMENT_ROOT']."/xx.txt","d://yy.txt")){ // echo "复制文件失败"; //}else{ // echo "复制文件成功"; //} fileDown("/demo/","a.jpg");//下载 exit() ?>
文件上传
<?php /**文件上载:$file_path文件夹路径 */ header("content-type:text/html;charset=utf-8"); function fileUp($file_path){ if($_FILES==null||$_FILES["myfile"]["error"]!=0){ echo "文件错误或文件过大"; return; } $size=$_FILES["myfile"]["size"]; $tname=$_FILES["myfile"]["tmp_name"]; $name=$_FILES["myfile"]["name"]; $file_path=$_SERVER["DOCUMENT_ROOT"].$file_path; $out_path=iconv("utf-8","gb2312",$file_path.$name);//转码中文文件名 if(!is_dir($file_path)){ mkdir($file_path,0777,true);//创建多级文件目录 } if(is_uploaded_file($tname)){ if(move_uploaded_file($tname,$out_path)){ echo "文件上传成功"; }else{ echo "文件上传失败"; } }else{ echo "文件不支持"; } } fileUp("/file/");//上传 ?>
九 MySQL MySQLi扩展
<?php // phpinfo();//php配置信息 $conn=mysql_connect("localhost","root","root");//mysql方式打开连接(建议用mysqli or PDO方式) if(!$conn){ die("连接失败fail".mysql_error()); }else{ echo "连接成功success<p>"; } mysql_select_db("mysql",$conn) or die(mysql_error());//选择一个数据库 mysql_query("set names utf8");//操作全部按照utf8码 $sq1="select * from user";//查询表 // $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表 // $sq1="delete from user where User='abc'";//删除表 // $sq1="update user set Password='111' where User='abc'";//修改表 $res=mysql_query($sq1,$conn);//执行返回资源类型dql语句或bool类型dml语句 if(mysql_affected_rows($conn)>0){ echo "操作成功<p>"; }else{ echo "没有变动<p>"; } if(is_bool($res)) return;//如果是bool类型不继续执行 while($row=mysql_fetch_row($res)){//mysql_fetch_row索引数组,mysql_fetch_assoc关联数组 foreach($row as $k=>$v){ echo $k."=".$v."\t"; } echo "<p>"; } mysql_free_result($res);//必须释放资源 mysql_close($conn);//系统会自动关闭连接 ?>
<?php $conn=new mysqli("localhost","root","root","mysql");//mysqli面向对象方式打开连接 推荐 if($conn->connect_error){ die("连接失败fail".$conn->connect_error); } $conn->query("set names utf8");//操作全部按照utf8码 $sq1="select * from user";//查询表 // $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表 // $sq1="delete from user where User='abc'";//删除表 // $sq1="update user set Password='111' where User='abc'";//修改表 $res=$conn->query($sq1);//执行返回资源类型dql语句或bool类型dml语句 if($conn->affected_rows>0){ echo "操作成功<p>"; }else{ echo "没有变动<p>"; } if(is_bool($res)) return;//如果是bool类型不继续执行 while($row=$res->fetch_assoc()){//fetch_row索引数组,fetch_assoc关联数组 foreach($row as $k=>$v){ echo $k."=".$v."\t"; } echo "<p>"; } $res->free();//必须释放资源 $conn->close();//关闭连接 ?>
mysqli批量操作、事务控制(原子性、一致性、隔离性、持久性)、预处理技术:
<?php header("content-type:text/html;charset=utf-8"); $conn=new mysqli("localhost","root","root","mysql");//mysqli面向对象方式打开连接 推荐 if($conn->connect_error){ die("连接失败fail".$conn->connect_error); } $conn->autocommit(false);//InnoDB结构类型可使用事务控制 $conn->query("set names utf8");//操作全部按照utf8码 $sq1="select * from user;select * from func";//查询表 // $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表 // $sq1="delete from user where User='abc'";//删除表 // $sq1="update user set Password='111' where User='abc'";//修改表 $res=$conn->multi_query($sq1); if($conn->affected_rows>0){ echo "操作成功<p>"; }else{ echo "没有变动<p>"; } if($res){ if(stristr($sq1,"select *")){//查询 do { $result = $conn->store_result();//先取出一个结果集 while ($row = $result->fetch_row()) {//fetch_row索引数组,fetch_assoc关联数组 foreach ($row as $k => $v) { echo $k . "=" . $v . "\t"; } echo "<p>"; } $result->close();//必须释放资源 }while($conn->more_results()&&$conn->next_result()); } $conn->commit();//成功将多个事务提交 echo "成功"; }else{ $conn->rollback();//失败事务全部回滚 echo "失败回滚"; } $conn->close();//关闭连接 ?> <?php $conn=new mysqli("localhost","root","root","mysql");//mysqli面向对象方式打开连接 推荐 if($conn->connect_error){ die("连接失败fail".$conn->connect_error); } $conn->query("set names utf8");//操作全部按照utf8码 $sq1="select host,user from user where select_priv=?";//查询表 // $sq1="insert into user (User,Password) values ('abc',md5('123'))";//增加表 // $sq1="delete from user where User='abc'";//删除表 // $sq1="update user set Password='111' where User='abc'";//修改表 $Select_priv="Y"; $stmt=$conn->prepare($sq1);//开启预处理 $stmt->bind_param("s",$Select_priv);//绑定参数s字符,i数字,d小数 $stmt->bind_result($host,$user);//绑定查询结果 $stmt->execute();//执行 if($conn->affected_rows>0){ echo "操作成功<p>"; }else{ echo "没有变动<p>"; } while($stmt->fetch()){ echo ("$host:$user<p>"); } $stmt->free_result();//释放资源 $stmt->close();//关闭预编译 $conn->close();//关闭连接 ?>
十 过滤器
<?php
header("Content-type:text/html;charset=utf-8");
//数值范围过滤器
$var=30;
$int_options = array(
"options"=>array(
"min_range"=>0, //最小值
"max_range"=>256 //最大值
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) {
echo("不是一个合法的整数");
} else {
echo("是个合法的整数");
}
//自定义函数过滤器
function convertSpace($string){
return str_replace("_", ".", $string);
}
$string = "www_xx_com";
echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));
//表单传值过滤器
$filters = array(
"name" => array(
"filter_has_var"=>FILTER_SANITIZE_STRING),
"age" => array(
"filter_has_var"=>FILTER_VALIDATE_INT,
"options"=>array(
"min_range"=>1,
"max_range"=>120)),
"email"=> FILTER_VALIDATE_EMAIL
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"]) {
echo("年龄必须在 1 到 120 之间。<br>");
}elseif(!$result["email"]){
echo("E-Mail 不合法<br>");
}else{
echo("输入正确");
}
?>
相关文章推荐
- php快速入门总结
- 简单快速PHP上传文件使用方法总结
- PHP快速入门教程:for循环
- PHP快速入门教程:WHILE循环的使用示例
- PHP编程基本语法快速入门手册
- 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
- Metro Style App开发快速入门 之基本控件使用总结
- 基于PHP的cURL快速入门
- MyBatis学习总结(一)——MyBatis快速入门
- PHP的入门总结
- Struts2 自我总结(1)--基础知识及快速入门
- PHP入门半月总结
- 基于PHP的cURL快速入门
- 初涉USB,初学者USB入门总结(4) USB通讯设备快速开发
- PHP学习总结(14)——PHP入门篇之常用运算符
- 夺命雷公狗---DEDECMS----6快速入门之总结篇
- MyBatis学习总结(一)——MyBatis快速入门
- PHP扩展开发(1):快速入门(转载)
- Kotlin学习总结(1)——Kotlin快速入门
- 第1章 PHP快速入门【第一篇】【1】