PHP快速入门总结

来源:互联网 发布:淘宝客吧 编辑:程序博客网 时间:2024/05/18 00:00

PHP快速开发网页和后台数据的热门语言,核心是LAMP:L指Linux,A指Apache,M指MySQL,P就是Php 。建议使用phpstorm工具开发Php,建议使用PHPstudy工具集成Apache和MySQL。格式:<?php header('content-type:text/html;charset=utf-8');  ?> 参考手册: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

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
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_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>');}

六 面向对象

面向对象三大特征:封装、继承、多态 。 (抽象)

<?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成功、304无修改取缓存、404找不到页面…

header('content-type:text/html;charset=utf-8');//中文乱码处理header("Location:xxx.php");//立即跳转html/php文件header("Refresh:3;url=http://localhost/demo/xx.php");//间隔3秒后跳转header("Expires:-1");//页面过期时间为之前时间则不使用缓存之一header("Cache-Control:no_cache");//no-cache,must-revalidate,no-store http1.1告诉客户端不使用缓存之二header("Pragma:no-cache");//兼容http1.0告诉客户端不使用缓存之三

<?php/**文件下载:$file_name文件名 $file_path文件所在路径 */function fileDown($file_name,$file_path){$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");//如果存在打开文件$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)){    $filedata=fread($file,$buffer);//!feof()文件没有结束继续读取    echo $filedata;//返回数据}fclose($file);//关闭文件}//fileDown("a.jpg","/demo/");?>

九 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批量操作 和 事务控制(原子性、一致性、隔离性、持久性):

<?phpheader("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();//关闭连接?>

……