PHP基础

1. PHP引用变量

  • 什么是php引用变量,在PHP当中,用什么符号定义引用变量?
    答:引用变量:在PHP中引用意味着用不同的名字访问同一个变量内容。
    定义方式:使用&符号

  • 延伸 php 引用原理

// COW Copy On Write  (写时复制)
//有一定经验的程序员应该都知道Copy On Write(写时复制)使用了“[引用计数](https://baike.baidu.com/item/%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0)”(reference counting),会有一个变量用于保存引用的数量。当第一个类构造时,string的[构造函数](https://baike.baidu.com/item/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0)会根据传入的参数从堆上分配内存,当有其它类需要这块内存时,这个计数为自动累加,当有类析构时,这个计数会减一,直到最后一个类析构时,此时的引用计数为1或是0,此时,程序才会真正的Free这块从堆上分配的内存。


//memory_get_usage();获取内存使用量
$a=range(0,100);
var_dump(memory_get_usage());//376472  //一个内存空间 refcount=1 is_ref=0

$b=$a;
var_dump(memory_get_usage());//376536  //一个内存空间 refcount=2 is_ref=0

$a=range(0,100);
var_dump(memory_get_usage());//380872 两个内存空间 refcount=1 is_ref=0

$b=&$a;  
var_dump(memory_get_usage());//376752 //一个内存空间 refcount=1 is_ref=1

unset($a);//unset只会取消引用,不会销毁空间
var_dump(memory_get_usage());//376752

unset($b);
var_dump(memory_get_usage());//373552

class 特性

class  Person{
    public $name='张三';
}
$obj1=new Person();
var_dump($obj1);//张三
$obj2=$obj1;
var_dump($obj1);//张三
var_dump($obj2);//张三
$obj2->name='李四';
var_dump($obj1);//李四
var_dump($obj2);//李四
//结论:对象本身就是引用传递

真题


image.png

第一次循环 abc
第二次循环 bbc
第三次循环 bcc

2. 常量及数据类型

PHP中字符串可以使用哪三种方式定义,他们的区别是什么?

  • 三种方式 单引号 双引号 heredoc和newdoc
  • 区别
    1.单引号不能解析变量
    2.单引号不能解析转义字符,只能解析单引号和反斜线本身
    3.变量和变量、变量和字符串、字符串与字符串之间可以用.连接
    4.双引号可以解析变量,变量可以使用特殊字符{}包含
    5.双引号可以解析所有转义字符
    6.也可以使用.连接
    7.单引号效率更高
    8.heredoc类似双引号
    9.newdoc类似单引号
    10.heredoc和newdoc都用来处理大文本

* 延伸

1.数据类型
三大数据类型(标量、复合、特殊)

1.1 浮点类型不能用于比较运算中

1.2 flase的七中情况

   0   0.0   ' '    '0'   false   array()   null
1.3 PHP中超全局数组

  $GLOBALS;
  $_SERVER;
  $_FILES;
  $_GET;
  $_POST;
  $_COOKIE;
  $_ENV;
  $_REQUEST;
  $_SESSION;

重点记忆

$_SERVER['SERVER_ADDR'];//服务器端ip地址
$_SERVER['REMOTE_ADDR'];//客户端ip地址
$_SERVER['SERVER__NAME'];//请求时间
$_SERVER['QUERY_STRING'];//?后面的
$_SERVER['HTTP_REFERER'];//上级请求页面
$_SERVER['HTTP_USER_AGENT'];//头信息中的user-agent信息
$_SERVER['REQUEST_URI'];//全
$_SERVER['PATH_INFO'];//路由

1.4 NULL的三种情况
直接赋值为NULL、未定义的变量、unset销毁的变量
1.5常量
1.5.1 定义方式
const define
1.5.2 区别

    const更快,是语言结构,define是函数
    define不能用于类常量的定义,const可以
    常量一经定义都不能被修改和被删除

1.6 预定义常量
      __FILE__;//文件路径名和文件名称
      __LINE__;//所在行号
      __DIR__;//所在目录
      __FUNCTION__;//所在函数体 函数名称
      __CLASS__;//类名
      __TRAIT__;//trait名称
      __METHOD__;//方法名
      __NAMESPACE__;//命名空间

3.PHP运算符

真题

  • foo()和@foo()之间的区别
    php支持一个错误运算符:@ 当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉
  • 运算符优先级


    运算符优先级
  • ==和===的区别
    ===是全等于 数据类型也需要一致
  • 递增递减运算符


  • 逻辑运算符
    短路作用和优先级不同


    image.png
  • 真题
$bool=false;
echo $bool++;
var_dump($bool++);//false;


$bool=true;
echo $bool++;//1
var_dump($bool++);//true;
image.png

4.流程控制

image.png

image.png

image.png
  • 真题
    PHP中如何优化多个if...eleif 语句?
    将可能性大的放前面
    考虑使用switch..case

7 会话控制

会话控制

为什么要使用会话控制技术

http是无状态的 无法记录用户的状态

会话控制技术 用来跟踪用户的请求
请求一次后,保存状态 下一次再请求时 就有记录了

实现方式

GET值传递

cookie

设置cookie

setcookie(value,path,secure)
value 值
path 路径
secure 安全相关

获取cookie
$_COOKIE[key]

删除cookie
setcookie($name,'',time()-1);

cookie优缺点
1.不会占用服务器资源
2.存在客户端不安全
3.用户可以禁用cookie

session优缺点
1.session基于cookie 如果cookie被禁用 可以通过值传递的方式传输
2.存储在服务器

HTTP 状态码

1xx 信息类状态码 表示接收的请求正在处理

2xx 请求处理状态

200     成功
204     不含实体的主体部分
206     部分的内容

3xx 重定向

301     永久重定向
302     临时重定向
303     
304 
307 

4xx 客户端错误

400
401
403
404

5xx 服务端错误

500
503 

OSI 七层模层

第一层     物理层                 建立维护断开物理连接
第二层     数据链路层           建立逻辑连接、进行硬件地址寻址、差错校验等功能
第三层     网络层             进行逻辑地址寻址,实现不同网络之间的路径选择
第四层     传输层             定义传输数据的协议端口号,以及流控和差错校验 TCP、UDP 数据包一旦离开网卡即 进入网络传输层
第五层     会话层             建立管理终止会话
第六层     表示层             数据的表示安全和压缩
第七层     应用层             网络服务与应用服务的一个接口 协议有  HTTP FTP TFTP SMTP SNMP DNS ETELNET HTTPS POP3 DHCP

8.正则表达式

  • 正则表达式的作用

  • 分隔符正斜线(/)、hash符号(#)、取反符号(~)

  • 通用原子

    • \d 匹配数字
    • \D 匹配除了数字
    • \w 数字字母下划线
    • \W 除了数字字母下划线
    • \s 空白符
    • \S 除了空白符
  • 元字符

    • . 除了换行符
      • 前面的内容0个一个或多个
        
    • ? 前面的内容0个或一个
      • 前面的内容0个或一个
        
    • ^ 以^后面的内容开始
    • 后面的前面的内容结束
    • {n} 匹配前面的内容n个
    • {n,} 匹配前面的内容>=n个
    • {n,m} 匹配前面的内容>=n个<=m个
    • [] 集合 [abc] a或b或c
    • () 后向引用或整体
    • [^] 取反 [^abc] 除了abc
    • | 或者
    • [-] 范围 [0-9] 代表0-9
  • 模式修正符

    • i 不区分大小写
    • m 每一行分开匹配(前提是有换行)
    • e 对匹配到的数据做php语法处理(php7.0已移除)
    • s 修正点.的换行
    • U 取消贪婪模式
    • x 忽略模式中的空白符
    • A 必须以这个模式开头
    • D 修正$对\n的忽略
    • u 中文匹配
  • 后向引用

    eg:

    $str='abc';

    $pattern='/(.*)<\/b>/';

    preg_replace($pattern,'\\1 ',$str);//此处1代表(.*)匹配到的东西
  • 贪婪模式
    eg:
    $str='abcabc';

    $pattern='/(.*)<\/b>/';

    preg_replace($pattern,'\\1 ',$str);
.* 匹配会匹配到最后一个 //abcabc

.*?取消贪婪模式匹配到一个  就不往下匹配了  //abc

你可能感兴趣的:(PHP基础)