php 的小细节

xiaoxiao2021-02-28  47

switch 执行易忽略的地方
$a=0; switch($a){ case 1: echo 44; break; case 0: case 2: echo 66; break; case 3: echo 88; break; default: echo 77; }正常情况下,会执行case为2的部分。

引用传递的好处

在函数中,按值传递,其实就是对变量制作一个副本,函数内部对变量的修改不会影响到函数外部。而按引用传递不仅可以在函数内部可以改变变量的值,而且在需要传递数据比较大的场景时,不需要构建一份数据的副本,可以提高性能。

浏览器缓存

  为了提高web站点的响应速度,浏览器一般有缓存机制。在实际的网页中,一般会对视频和静态资源进行缓存。而作为程序员,了解浏览器缓存机制可以对网站开发起到一定的作用。

1、缓存控制

  首先我们可以通过一些请求头对浏览器缓存进行控制。

  cache-control: no-store  请求和响应都禁止被缓存must-revalidate 需要进行缓存验证

  private:客户端可以缓存  public: 客户端和代理服务器都可缓存  max-age=xxx: 缓存的内容将在 xxx 秒后失效

Cache-Control: no-cache 如下头部定义,此方式下,每次有请求发出时,缓存会将此请求发到服务器(译者注:该请求应该会带有与本地缓存 相关的验证字段),服务器端会验证请求中所描述的缓存是否过期,若未过期(注:实际就是返回304),则缓存才 使用本地缓存副本。 2、缓存验证

用户点击刷新按钮时会开始缓存验证。如果缓存的响应头信息里含有"Cache-control: must-revalidate”的定义,在浏览的过程中也会触发缓存验证。另外,在浏览器偏好设置里设置Advanced->Cache为强制验证缓存也能达到相同的效果。

进行缓存验证是通过last-Modified / if-Modified-Since  和 ETag / If-None-Match   进行的。

一般情况下浏览器第一次进行请求时候,服务器正常响应,返回给浏览器last-Modified 响应头和响应内容。浏览器第二次进行请求时,会带上if-Modified-Since ,它的值与服务器返回的last-Modified的值一样,服务器接收到这个值以后 会与文件的最后修改时间进行对比,如果文件的最后修改时间大于if-Modified-Since,服务器就会返回最新的文件内容,浏览器就不会使用缓存。相反,浏览器就会使用缓存文件,服务器状态码为304。ETag / If-None-Match 的原理与上述是一样的。

一、多维数组的排序

在以前面试的时候,笔试的时候总会碰到多维数组的排序问题,而在数据库的查询结果虽然也是多维数组,但是可以通过数据库的order进行排序,所以对多维数组排序没有研究。

其实是比较简单的。主要借助于PHP的usort、uasort等函数。如下:

$arr=[ ['key1'=>940,'key2'=>'bash'], ['key1'=>9140,'key2'=>'this'], ['key1'=>9240,'key2'=>'that'], ['key1'=>40,'key2'=>'fish'] ]; //根据数字排序 uasort($arr,'asc_number_sort'); //根据字符排序 uasort($arr,'str_sort'); dump($arr); function asc_number_sort($x,$y){ if($x['key1'] < $y['key1']){ return -1; }elseif ($x['key1'] == $y['key1']){ return 0; }else{ return 1; } } function str_sort($x,$y){ return strcmp($x['key2'],$y['key2']); }

参考文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ

转载请注明原文地址: https://www.6miu.com/read-40595.html

最新回复(0)