php知识点-对比篇

6 篇文章 0 订阅
本文介绍了PHP中define()和const定义常量的区别,require与include的加载机制,以及单引号和双引号字符串的不同。此外,还详细讨论了传值与引用参数的传递方式,以及cookie和session的用途、工作原理和安全性。最后,提到了PHP中的相等运算符和输出函数的对比,以及for和foreach循环的差异。
摘要由CSDN通过智能技术生成

define() 和const的区别

  • 两者都是定义常量使用
  • const 是语言结构, define 是函数
  • const 可在类中使用, define 不可以
  • const 可以不同命名空间定义相同名称的常量, define 不可以
  • const 大小写敏感, define 默认敏感, 可通过第三个参数为 true 设置为不敏感

include 和require的区别

  • require 是无条件包含, 也就是如果一个流程里加入 require , 无论条件成立与否都会先执行 require , 当文件不存在或者无法打开的时候, 会提示错误, 并且会终止程序执行

  • include有返回值, 而require没有 (可能因为如此 require 的速度比 include 快), 如果被包含的文件不存在的话, 那么会提示一个错误, 但是程序会继续执行下去

单引号和双引号的区别

  • 单引号不解析变量,双引号解析变量
  • 单引号只可解析单引号及转义符本身,双引号可解析更多的特殊字符。例: \n、\r、\t
  • 解析速度不同,因单引号不考虑变量解析,所以比双引号要快

传值和引用的区别

  • 按值传递 :函数范围内对值的任何改变在函数外部都会被忽略
  • 按引用传递 :函数范围内对值的任何改变在函数外部也能反映出这些修改, 因为传引用传的是内存地址。
  • 优缺点:按值传递时, php 必须复制值。特别是对于大型的字符串和对象来说, 这将会是一个代价很大的操作。按引用传递则不需要复制值, 对于性能提高很有好处。

cookie 与 session 的区别, 禁用 cookie 后如何传递 session

cookie

Cookie 是一段不超过 4KB 的 小型文本信息,是网站为了辨别用户身份,而 存储在用户本地终端上的数据。
Cookie 由 key:value、Expires属性、Path属性、Domain属性、Secure属性、HTTPOnly 属性 组成。
key:value : 设置 Cookie 的名称及相对应的值。

Expires属性 : 设置 Cookie 的生存周期。
生存周期有两种类型 : 会话性 与 持久性 。
会话性 : 不设置 cookie 过期时间 时为 会话性 Cookie,仅保存在浏览器内存中,并在用户关闭浏览器时失效。比如: 用户登录之后,此时用户信息 Cookie 保存在浏览器中,当用户关掉浏览器后,再次打开网站就需要再次登录。
持久性 : 设置 Cookie 过期时间 时为 持久性 Cookie,持久性 Cookie 会保存在用户硬盘中,直到 Cookie 过期或主动退出(清除 Cookie)时才会失效。

Path属性 : 规定 Cookie 的服务器路径。
如果路径设置为 “/”,那么 Cookie 将在整个域名内有效.如果路径设置为 “/test/”,那么 Cookie 将在 test 目录下及其所有子目录下有效。默认的路径值是 Cookie 所处的当前目录。

Domain属性 : 指定了可以访问该 Cookie 的 Web 站点或域。
为了让 Cookie 在 example.com 的所有子域名中有效,您需要把 Cookie 的域名设置为 “.example.com”。当您把 Cookie 的域名设置为 www.example.com 时,Cookie 仅在 www 子域名中有效。

Secure属性 : 指定是否使用HTTPS安全协议发送 Cookie。

HTTPOnly 属性 : 用于防止客户端脚本通过 document.cookie 属性访问 Cookie,有助于保护 Cookie 不被跨站脚本攻击窃取或篡改。

cookie的作用:
Cookie 用来跟踪用户身份,进行会话控制。因为 HTTP 是无状态协议,一次请求后,客户端与服务器就会关闭连接,以后用户再发起请求时,服务器不知道是哪个用户请求他,这时就用到 Cookie 了。

cookie的工作原理:
客户端浏览器发起请求 ( 用户打开网站,输入账号密码,点击登录)
服务器接收并响应 ( 服务器接收请求,创建 Cookie,将用户信息存入,并将 Cookie 返回客户端浏览器,浏览器将 Cookie 保存至内存或本地文件)
客户端之后再发起请求 ( 将 Cookie 一起发给服务器)
服务器接收并响应 ( 服务器收到 Cookie 后,可以识别是哪位用户进行操作,再进行处理)

php设置cookie:

// 语法
setcookie(name, value, expire, path, domain, secure);

$value = 'cookie value'; // Cookie 值

// 会话性 cookie
setcookie("testCookie", $value);

// 1小时过期的 cookie
setcookie("testCookie", $value, time()+3600);

// 删除 cookie, 将过期时间设置以过去时间
setcookie("testCookie", '', time()-1);

//-------------------------------------------

// PHP 获取 cookie
$testCookie = $_COOKIE['testCookie'];

SESSION

Session 同 cookie 一样,是网站为了辨别用户身份,而 存储在服务器端的数据。
通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。

Session的作用:Session 用来跟踪用户身份,进行会话控制或保持会话。

Session的工作原理:
客户端浏览器打开 cookie 时
客户端浏览器发起请求 ( 用户打开网站,输入账号密码,点击登录)
服务器接收并响应
服务器接收请求,开启 session session_start(),并随机生成唯一的32位的 session_id,创建以 session_id 命名的文件用来保存用户信息。通过 HTTP 响应头将 session_id 返回客户端浏览器,浏览器将 session_id 通过 cookie 保存至内存或本地文件中)

客户端之后再发起请求 ( 将 cookie 中的 session_id 一起发给服务器)
服务器接收并响应 ( 服务器收到 session_id 后,去寻找 session 文件中获取用户信息,识别是哪位用户进行操作,再进行处理)

php设置session: 在 php.ini 中 session.save_path 配置项找到 session 默认保存路径

// 初始化
session_start();

// 设置 session
$_SESSION['name'] = "Dom";

// 删除 session
if (isset($_SESSION['name'])) {
    unset($_SESSION['name']);
}

Cookie 和 Session的区别

  • 存储位置不同
    Cookie 存储在浏览器内存或者客户端的硬盘中。

Session 存储在服务器的硬盘或数据库或缓存或等等中,但如果使用 cookie 保存 session_id 时,session 会依赖 cookie。 session 生成的 session_id 会返给客户端,客户端将 session_id 用 cookie 进行保存。

  • 存储大小不同
    cookie 存储大小 4k 左右, 不同浏览器限制 单个域名存储 cookie 的数量 也不一样。1个字母占1个字节,1个汉字占3个字节。

session 不限制大小,只限制生命周期。

  • 性能程度不同
    cookie 存储在浏览器或客户端本地文件中,访问速度快。

session 如果存储在服务器上,如果在某个时间段,访问量暴增,会占用服务器性能。

  • 安全程度不同
    session 相对 cookie ,session 比较安全。
    防君子不防小人

浏览器禁用 cookie 后, 如何使用 session

1.通过url传值

# 通过 url 重写
https://www.baidu.com?sessid=123456

2.通过隐藏表单或ajax传值

<!-- html 隐藏表单 -->

<form name='testSID' action='/???'>
    <input type='hidden' name='sessid' value='123456'>
</form>

// ajax 传值, 这里使用的是 jq 
$.post("/???", {sessid: 123456}, function (res) {
});

3.修改 php.ini 中的 use_trans_sid
将 php.ini 中的 use_trans_sid=0 修改为 use_trans_sid=1, 就会检查客户端是否禁用 cookie,如果禁用,就会默认采用 第一种: 通过 url 传值 方式进行传递 sessionid

== 和 ===的区别

  • == 要求两侧的值相同,弱类型判断
  • === 要求两侧的值与类型都得相同

echo、print、print_r、var_dump 的区别

  • print_r 与 var_dump 是函数, echo、print 是语句
  • echo 用于输出数值变量或字符串,可以逗号分隔输出多个。数组输出 Array, 对象报错。例: echo $a, $b;
  • print 用于输出数值变量或字符串, 不可输出多个。数组输出 Array, 对象报错。例: print $a;
  • print_r 可简单输出 字符串、数字、数组、对象, 但 布尔(false)、null 都是打印 \n
  • var_dump 可输出所有字符串、数字、布尔、数组、对象。包括键、值、类型、长度。

isset 与 empty 的区别

  • isset 检测变量是否设置并且非 NULL
  • empty 检测变量的值是否为 false, PHP 中 0、false、[]、‘0’ 、‘’ 所代表的布尔值都是 false

for 与 foreach 的区别,哪个更快?

  • for 需要预先知道数组的长度, foreach 不需要
  • foreach 效果要比 for 高,foreach 直接通过结构体中的 next 指针获取下一个值, 而 for 循环需要根据 key 先进行一次 hash 才得到值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值