PHP基础知识

关于PHP的所有基础知识

P全称:Hypertext Preprocessor
Lerdorf(勃道夫)
php语言的特点
混合在html中的服务器端脚本语言
脚本语言—解释执行的语言 php js
编译形语言—先编译在执行 java c#

1、性能好,开发效率高
2、跨平台(操作系统,Linux,Windows,Mac,Lunix)
3、语法简单,上手快,开发快
4、面向对象的编程语言
5、开源免费

http://www.phpchina.com/
http://www.php100.com/

1、php标记p

占位符:
%s用于字符串类型的占位符
%b用于十进制整数
%f浮点类型的占位符
%.(保留任意小数的位数)n(任意小数的位数)f

var_dump

数据类型:
1、基本数据类型
1、boolean(布尔型)
2、integer(整型)
最大范围-21亿 21亿

3、float(浮点型,也称作double)
	精度保留小数点后16位
	带小数的是浮点类型
4、string(字符串)
	可以用双引号或者单引号 表示
	单引号不能解析变量
	双引号可以解析变量
	$str="张三";
	$str='张三';
	转移符 $b="我叫\ "郭树燃"\";

	长文本
	代码:
		 $str=<<<text
	   what are you what in whiat  wait 
	   halou  what are you doing
	text;
	  echo $str;

2、复合数据类型
1、Array(数组)
2、Object(对象)
3、特殊数据类型
1、reseource(资源)
2、NULL(无类型)

布尔值的作用(boolean)
true:真
false:假
作用:存放判断的结果
自动类型转换
0 false
0.0 false
非0 true
“0” false
“” false
非0 true
非"" false
空数组 false
非空数组 true
非空的对象 true
空对象 false
NULL false
(任何形式的空或者0都表示false)

自动类型转换
true 转换成1
false 转换成0
字符串类型的数字(“23”)如果有. e E 转成浮点数,其他转换成整数
字符串以有效数字开头,数字会参与运算,否则转换为零

强制类型转换
358.4 float 浮点 强制转换成整数,直接舍去小数
$num=(int)358.4
整数强制转成浮点数,直接加.0
$num=(float)358

php变量
变量:是内存中存储数据的空间
1、变量值
2、变量名
3、变量的类型
命名规则:变量名以字母下划线开头,其余部分是字母数字下划线
不能使用$ this
变量名区分大小写
变量的赋值

b = b= b=a;值传递
取 址 符 将 取址符 将 a址给了 b 将 b 将 ba的内存地址给了 b 。 修 改 b。修改 bb a 也 会 跟 着 改 变 , 因 为 a也会跟着改变 ,因为 aa,$b指向了同一块储存空间


isset()检查是否设置该变量
unset()销毁变量,释放内存


变量的作用域
1、局部变量 在函数内定义的变量,作用于只能在函数内使用
2、全局变量 1、定义在函数外,作用域在当前的文件内使用
2、如果要在函数内使用,需要声明global $name声明
3、静态变量
static $num=10;
函数执行完之后,静态变量不会被释放
优点:变量的值会被保存,执行效率快
缺点:始终占用空间
4、超全局变量
在整个项目每个php文件中都能使用

常量:
1、一旦定义,值就不能改变
2、布尔,整数,浮点数,字符串可以定义为常量
语法:

define("PI",3.14);
		↑	  ↑
		名称  值
常量不使用$,通常名称为大写

预定义常量(系统常量)
1、FILE 当前php文件完整路径
2、LINE 当前代码所在的行数
3、DIR 当前php文件所在的目录

运算符
算数运算符:+ - * / %
关系运算符:< > >= <= == === (!= <>) !==
↑ ↑
恒等 不等

	=

+=
-=
*=
/=
%=
. =
&& and
|| or
! not
自增,自减
++ –


字符连接串:".";
php中 只作为加法运算


三元运算符: ? :
判断条件?表达式1表达式2‘

错误屏蔽符 @()or die(“错误信息”);

结构:
1、顺序结构
2、分支结构

3、循环结构

①、基本if结构
if(判断条件):条件成立后执行的语句
条件不成立
endif(判断条件){
条件成立后执行的语句
}

if(判断条件1):
elseif(判断条件2):
elseif(判断条件3):
endif

多分支结构,主要用于等值判断
多重if区间性判断 要遵守由大到小的判断顺序

switch(表达式){
case 值;
语句;
break;

case 值2;
	语句2;
break;
  ...
defualt:
语句
break;

}

没有break程序会贯穿执行
switch 只判断值是否相等

循环结构

1、while(循环条件){
	循环操作
}

循环结构的三个元素
  1、初始化循环变量
  2、循环条件
  3、更新循环变量(偶数加2)


  for(初始化循环变量,循环条件,更新循环变量){


  }

  1 1 2 3 5 8 13 21 34 55
  2 4 7 11 16 22……
  3 7 14 25 41 63……
  4 11 25 50 ……




  函数:
  为什么定义函数
  1、相同功能的代码,可以重复使用避免代码冗余(大量重复的代码)
  2、什么是函数:封装好的代码块
  函数的特点:
  1、代码的重用性
  2、封装性  封装 (隐藏内部实现)

  function calc($num1,$num2,$fu) 形参

  调用函数
    calc(40,5,"+");    实参

 //参数   值传递,修改的是实参的副本
		//    function add($num){
		//        $num+=5;
		//    }
		//
		//
		//    $a=10;
		//    add($a);
		//    echo $a;


//引用传递,实参的也会产生改变
function add(&$num){
    $num+=5;
}
$a=10;
add($a);
echo $a;

函数按照参数的分类 
	1、有参
	2、无参
	function 函数名(){

	}
	function 函数名(参数1,参数2,...){

	}
	参数: 值传递  引用传递  &参数


	参数默认值的规则
	有默认值的参数放在没有默认值参数的后面

	asr();函数


	函数返回值:
			function 函数名{
				return 返回值;
			}
	1.找到sum函数
	2.将实参给形参赋值
	3.将返回值 返回到调用的位置

	1.return(只能返回一个值)
	2.return 函数执行到return就结束,return后的语句不会被结束

	
	递归函数:
			自己调用自己

	include require(必须)作用和区别
	作用:包含并运行指定的文件
	区别:当include导入的文件不存在,下面其他代码继续执行
		  当require导入的文件不存在,下面的其他代码不执行
	↑
	通常的用法
			导入函数库



	{include_once    先判断要导入的文件是否已经存在
	}require_once	   如果存在就不导入了,不存在则导入



	数组
	php定义数组
	1、数字索引数组
		1.arr[0]=30;
		  arr[1]=40;
		  arr[2]=29;
		  arr[3]=88;
		  arr[4]=79;
	arr 数组名
	[]索引下标


	2、arr[]=30;
	   arr[]=40;
	   arr[]=29;
	   arr[]=88;
	   arr[]=79;


	3、 $arr=array(31,44,32,55);

	4、循环输出数组
			count(数组名)  获取数组的长度


	foreach ($arr as $value){
			   echo $value."<br>";
			   }

	
	关联数组
	1、 $student["name"]="张三";		   
		$student["sex"]="男";		   
		$student["age"]="18";		   
		$student["hobby"]="丢沙包";

		$student=array("name"=>)


	数组的函数:
	关于数组的排序
	用于数字索引数组,改变key改为数字索引
					sort(数组名)  升序;
					rsort(数组名) 降序;
	用于关联数组的排序
					asort(数组名)
					arsort(数组名)

	对关联数组中的k进行排序				
					ksort(数组名)
					krsort(数组名)


	array_pop       删除数组中的最后一个元素

	array_push		向数组尾部插入元素

	array_shift		移除数组第一个元素

	array_unshift	在数组的开头添加一个或多个元素

	in_array() 		检查数组是否有某个值  有就是 true  没有就是false
	
	array_key_exists 检查数组中是否有某个key

	array_search()查找数组元素,并返回key或者索引

	array_sum()   计算数组中所有值的和

	array_unique() 移除数组中重复的值
	注:去除重复不会对原数组产生影响
		而是产生新的数组



	list() 把数组中的值赋给一些变量
	count() 计算数组中的单元数目或对象中的属性个数
	**********************************************
	usort()使用用户自定义的比较函数对数组中的值进行排序 
	 usort($student,function($x,$y){
        return $x["scare"]>$y["scare"];
		    }
		    );
		    echo"<pre>";
		    print_r($student);


	array_fliter()
		newtu=array_filter($student,function ($x){
			   if($x["age"]>1&& $x["sex"]=="男"){
			       return $x;
			   }
			});

			foreach ($newtu as $value){
			    echo "姓名".$value["name"]."性别".$value["sex"]."年龄".$value["age"]."成绩".$value["scare"]."<br>";
			}

	usort 用户自己排序


	字符串:
			trim  去除字符串左右两端的空格(或其他符号)
			ltrim  去除左侧空格
			rtrim  去除右侧空格

			md5  对字符串加密

			strlen()  获取字符串的长度   字节数
    mb_strlen() 又有中文又有英文  默认不启动

					字符编码:
						utf-8 国际统一编码 一个中文占三个字节
						gb2312,gbk	  简体中文编码,一个中文占两个字节
						(中文 mb_strlen)
					big5繁体中文编码

					strrpos()
					
					substr()
					strstr()
					strtolower()
					strtoupper()
					str_replace
					explode
					implodea
					nl2br



        strrpos   最后一次出现的位置
        strpos — 查找字符串首次出现的位置  找不到返回false
        substr   原字符串,起始位置,长度,截取字符串 
        strstr   截取从子字符串的位置到结束位置的字符串加 true 截取位置之前的部分
        strtolower("HUI"),将字符串转换成小写
        strtoupper("hui"),将字符串转换成大写

        
        *  explode  将字符串分割成数组    
 
           implode  将数组在连接成字符串



       str_replace()替换字符串

       mbstring php扩展文件

       1、扩展文件的路径去掉注释
       2、去掉注释(;)
       3、重启Apache


       xss 跨站


       htmlspecialchars 
       将html标签进行转义
          $str= "<script> while (true){}</script>";
          echo htmlspecialchars($str);

       htmlspecialchars_decode  
       将转义的字符串 转换成html标签

       strip_tags 
       从字符串中去除 HTML 和 PHP 标记 
       

       *********************
          ↓
       非常重要
        get   -隐式提交
        post  -隐式提交


        get提交特点
        1、get提交的数据会出现在地址栏
        2、不安全
        3、提交数据的长度有限(7675)

        post提交特点
        1、隐式提交数据,不会出现在地址栏
        2、数据相对安全
        3、理论上提交的数据量没有限制

        用js跳转页面
        if($newuser){
                    //  登陆成功  跳转到search
                    echo "<script> location.href='search.html' </script>";

                    }else{
                    //    登陆失败跳转到error
                        
                    }
        用php跳转页面
         header()进行页面跳转
              header("location:error.html");



        如何判断直接跳转,还是通过搜索按钮提交的
        判断是否有GET传值
        没有传值 $_GET空的数组

        没有传值  $_GET就是空的数组
        有传值    $GET  非空
         ------------------------------------------mysqli-----------------------------------------------
        4、 
          //  1、创建数据库连接 使用 php_mysqli

              $conn= new mysqli("localhost","root","aq.qq.comWJ","mailaing","3306");

          //  2、设置字符集
              $conn->set_charset("utf8");

              //  3、编写sql语句  插入数据
              $str="insert into Categories(name) values('食品生鲜')";

              //  4、执行sql语句 执行语句齁的返回值
              $result=$conn->query($str);
              //  5、插入语句 返回值 成功true 失败 false
              if($result){
                  echo '添加成功';
              }else{
                  echo '失败';
              }

          5、查询
            $result=$conn->query($sql);
             成功返回的是结果集  失败返回的是false

            $result->feth_assoc()获取结果是集中的一行数据,关联数组的形式返回

            $result->feth_row() 获取的是数字索引数组的形式返回

            $result->feth_array() 获取的是数字索引数组和关联数组的形式返回

          6、
          执行sql语句所产生的错误信息
              echo $conn->error;
          执行sql语句中的错误号
              echo $conn->errno;
          受影响的行数
              echo $conn->affected_rows;
          7、
          关于结果集的
          $result->field_count 查询到的列数
          $result->feth_fields()获取结果集中列的信息
          $result->num_rows()函数 获取结果集中行数的信息

          8、sql注入式攻击
            '' or '1'='1'--
          9、mysqli增删改预处理方式
            $sql="insert into student(name,sex,age)
            values(?,?,?,?)
            ";
            $smts=$conn->prepare($sql);
            $smts->bind_param("ssi",$name,$sex,$age);
            $smts->execute();
            可以解决sql注入的问题。
            转义语句特殊符号
          10、
            $sql="select * from users where username=? and userpwd=?";
            1、$smts=$conn->prepare($sql); 加载sql语句
            2、$smts->bind_param("ss",$name,$pwd); 替换占位符
            3、$result=$smts->execute();  执行



      --------------------------------------PDO----------------------------------
      1、 PDO的全称   php data object  数据抽象层
      2、 PDO对大多数数据提供了一个统一的数据库操作接口
      3、 建立连接 $pdo=new PDO("mysql:localhost;dbname=mailaing","root","aq.qq.comWJ");
      4、//    PDO设置字符集$pdo->query("set names utf8");
      5、fetchAll()  获取查询结果 返回二维数组
      6、FETCH_ASSOC  返回关联数组
      7、FETCH_NUM  数字索引数组
      8、FETCH_BOTH  默认值
      9、$result=$smst->fetch(); 提取一行数据,返回一维关联或数字索引数组
      10、$smts->fetchColumn(索引)提取查询结果中的单个值
      11、$smts->rowCount()受影响的行数
      12、$stms->errorCode()错误代码  1146 mysql  42S02
      13、$stms->erroInfo()错误信息   0公共错误码  1 mysql错误码 2 错误信息
      15、    <?php
              define("DBTYPE","mysql");
              define("HOST","localhost");
              define("DBNAME","bookshop");
              define("USER","root");
              define("PWD","aq.qq.comWJ");
              $pdo=new pdo(DBTYPE.":HOST=".HOST.";dbname=".DBNAME,USER,PWD);
              $pdo->query("set names utf8");
              ?>
      PDO非预处理增删改
          $sql="select * from ***";
          $result=$pdo->query($sql);
      PDO非预处理查询
          $sql="select";
      结果集
          $result=$pdo->query($sql)
      之后用$result->fetch()或者$result->fetchAll()未获取数据




      分页中计算页码的起始位置
      $pageindex 当前页
      10表示每组页码的个数
      $start=(ceil($pageindex/10)-1)*10+1;

      分页中计算页码的结束位置
      $



      http 协议  无状态 
      每一次请求服务器的链接 都是新的链接
      服务器不会记住账户


      ----------------------------------------cookie-------------------------------
      1、保存到客户端
      2、由服务器写入到客户端
      3、由浏览器带着cookie 请求服务器
      4、服务器识别用户信息
      5、cookie 是一个小的文本文件
      6、每个cookie的大小最大是4k  每个域名能写入20个cookie
         一共存300个cookie
      7、写入cookie setcookie("user","admin",time()+60*60*24*10);
      8、time 1970-1-1 0:0 到现在经过了多少秒                                                            
      9、读取cookie $_COOKIE["name"];
      10、删除cookie(让cookie 过期)
          setcookie("user","admin",time()-1)
      11、cookie的问题
          ①、cookie存用于客户端,客户端可以阻止写入cookie
          ②、cookie存放数据量小  4k
          ③、cookie 不安全
      12、COOKIE是一个关联数组
      13、serialize(数组名) 将复合数据类型转换成字符串(序列化)
      14、unserialize($str)将数组还原成字符串(反序列化)
    
        ---------------------------session------------------------------------
      session 会话
       启动session 
              session_start();
          存储session   $_SESSION["name"]=value;
          读取session   $_SESSION["name"];
          session过期时间 到浏览器关闭(会话结束时)如果客户没有再次请求服务器
          session默认的过期时间是1440秒,24分钟


          1、客户端 sessionid(唯一编号)
          2、数据存放在服务器端,根据客户的编号来存取数据
          3、unset($_SESSION["cart"]);删除session中的每个值 
          4、清空session $_SESSION=null;
          5、销毁session session_destroy();

      配置session
      1、打开php.ini
      2、找到session.save_path去掉分号  修改路径
      3、查找session.save_handler  这是session的储存介质,可以存在内存里,可以存在文件里,可以存在数据库里,默认存储在文件当中
      4、查找session.name   显示PHPSESSID  可以修改   是存储cookie的名称
      5、查找session.auto_start=0  手动启动
      6、查找session.cookie_lifetime = 0 存放sessionid的cookie的过期时间 0 会话结束
      7、查找session.gc_maxlifetime  其中gc等于垃圾回收 


      session的生命周期
      1、session 默认 会话结束
      2、在没有再次请求服务器的情况下,默认过期时间是1440
      3、如果修改了session.gc_maxlifetime ,session的过期时间以修改的值为准

      ----------------------------------超全局数组-----------------------------------------------
      $_POST
      $_GET
      $_RESQUEST
      $_SESSION
      $_COOKIE
      $_FILES

      $_SERVER 服务器相关信息
      $_SERVER["REMOTE_ADDR"];   获取客户端的IP地址
      $_SERVER[HTTP_USER_AGENT] 获取用户操作系统的信息,浏览器的信息
      $_SERVER[HTTP_ACCEPT_LANGUAGE]获取客户端的语言
      $_SERVER[SERVER_NAME] 服务器名称
      $_SERVER[SERVER_ADDR 获取服务器的IP地址
      $_SERVER[SERVER_PORT]服务器的端口号
      $_SERVER[DOCUMENT_ROOT]  项目的根目录
      $_SERVER[REQUEST_URI] 获取请求的页面url 路径
      $_SERVER[REQUEST_METHOD]获取请求的方式
      $_SERVER["HTTP_REFERER"]获取发起请求页的url地址 


      -----------------------------------缓存----------------------------------------------------
      1、可以极大地提高网站的访问效率
      2、缓存的定义就是  用空间换时间
        怎样优化服务器量太大的问题
        1、给数据库合理的添加索引
        2、给网站增加缓存

      缓存的分类

      1.页面的静态化缓存

        

        $smarty->caching=true;
        $smarty->cache_lifetime=3600;
        默认文件夹:cache
        缓存文件存到文件夹  $smarty->cache_dir="huancun";

----------------------------------------php面向对象-----------------------------------------------------------------------
oop 面向对象的编程
万物皆对象
对象有 属性和方法
具有相同属性和共同方法的一组对象叫做类
面向对象的编程
1.代码的封装性
2.重用性
3.代码的扩展性
4.代码的可维护性
5.具有共同属性和共同的方法的一组对象:类

类和对象
类是对象的抽象
对象是类的具体实现(实例)

代码实现面向对象的编程:
1、先定义类
class 类名{

//属性
public(访问修饰符) 属性名;
//方法
函数

}
 规范:类名使用帕斯卡命名法
       文件命名:类名+.class.php

2.通过类实例化对象
对象名 = new 类名();
访问属性
对象名->属性名=属性值
调用方法
对象名->方法()

构造函数
1.作用:初始化类的成员变量(属性)
2. 语法
public function __construct( n a m e , _name, name,_sex, a g e , _age, age,_hoddy)
{

 在类的内部来访问自身
    this代表当前对象
    $this->name=$_name;
    $this->sex=$_sex;
    $this->age=$_age;
    $this->hoddy=$_hoddy;

}
默认有一个无参的构造函数
实例化对象的时候都会自动调用构成函数

3.魔术方法

  1. 当访问的属性不存在,自动调用__get方法
public function __get($name){



}
2.赋值的时候属性不存在的时候
 public function __set($name, $value)
      {
          echo $name."真的不存在";
      }
 3.
  function __autoload($name){
      $file=$name.".class.php";
      require $file;
    }帮我们在使用类的时候自动加载

4.类当中的public (访问修饰符)
公共:在类的内部和外部都可以被访问到
作用:可以控制访问权限
public公共的-在类的内部和外部都可以被访问到
5.类当中的private(私有的)
私有:只能在类中被访问到
6.static 静态的-直接使用类名来访问 类名::属性或者方法
在类的内部访问静态成员 用self::
7. protected:受保护的 在类的内部和子类可以访问

---------------------------------------------------------继承--------------------------------------------------------------------------
8.
子类继承父类的非私有成员,实现代码的重用性,和扩展性
class 子类 extends 父类{

}

9.调用父类成员
parent::
10.
重写
子类定义和父类相同的成员,子类会覆盖父类的成员

12.继承的特性
单根性(一个子类只能继承一个父类)
传递性(c extends b b extends a)
-----------------------------------------------------面向对象的三大特性--------------------------------------------------------------------
1、封装 不关心内部的细节实现
2、继承 实现代码的重用和扩展,子类继承父类的非私有成员
3、多态
1.同一个类在不同的环境表现出不同的状态
2.不同的对象调用同一个方法表现不同的状态

---------------------------------------------------面向对象数据库查询------------------------------------------------------------------------
-------------------------------------------------面向对象抽象类----------------------------------------------------------------------------
public abstract function
父级有抽象方法子级一定要实现,或者子级都使用一个共同的方法。但用法不同
抽象类只能被实现,不能被实例化(不能被new),不能创建对象
只能被子类继承
抽象方法没有具体实现,由子类去实现,子类必须实现
抽象方法必须定义在抽象类中
什么情况下定义抽象方法
子类都具有的共同方法,但是每个子类的具体实现不同
抽象类不一定有抽象方法
子类必须要实现抽象类的抽象方法,除非子类也是抽象类
抽象类抽象方法可以使不同的对象具有相同的方法 但方法表现出来的行为不统一
抽象类抽象方法可以实现多态
$COM=new 类名;
当 构造函数无参的时候,小括号可以省略
类名和方法名不区分大小写
-------------------------------------------接口---------------------------------------------------------------------------------------------
接口: 是对继承单根性的扩展
约束子类的行为
子类只能继承一个父类但可以继承多个接口
接口语法:interface I(以大写的I开头)接口名
{
可以定义常量 define(“PI”)
常量还有一种常量方法 const PI

  function 函数名();

}
接口可以定义常量和函数,但都不能有具体的实现
而且不能写访问修饰符,因为接口中的成员都是隐式公开(public)

class 子类 extends 父类 impements 接口1,接口2…
{

}

__call() 当调用的方法不存在时,自动调用__call方法

final 最终的 不能被继承,子类不能重写


DBhelper

1、建立数据库的链接
2、增删改查
2.1 select * / 列名 from 表名
inner join表名 on 链接条件
where 查询条件
order by 列名

      $fileds 字段(列名)
      $tablename 表名
      $join 连接的表名和链接条件
      $where 查询条件
      $orderby 排序的列名  asc/desc
      $limit 开始,行数 

2.2     delete from where 删除条件
2.3     update 表名set 列名 

        public function setfileds($arr){
    foreach ($arr as $k=>$v){
        $this->filedlist.="$k='$v',";
    }
    $this->filedlist=substr($this->filedlist,0,strlen($this->filedlist)-1);
}


spl_autoload_register  当类找不到 自动加载类所在文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值