PHP笔记 一

发布时间:2021-05-23 23:58:06 阅读:(219)

    mysql

    char 与 varchar

    char : 定长,效率高,一般用于固定长度的表单提交数据存储
    varchar:不定长,效率较低
    使用 Innodb引擎的话,使用varchar 代替 char


    软删除

    删除操作会在数据表中留下很大的空洞,将会导致性能问题,可使用 OPTIMEIZE TABLE,进行碎片整理


    msyql根据json字段内容作为查询条件

    使用 字段 -> '$.json属性名'进行查询


    Redis

    雪崩

    大批量缓存同时失效、或者缓存层自身出现问题,导致对db物理层的压力骤增
    方案:

    使用集群,防止某台机器出现问题后影响这个服务
    
    互斥锁,使用锁机制或者队列来控制进行读写对的线程数,将服务器压力控制在可控范围
    
    不同的key设置不同的过期时间,让失效时间尽可能的均匀分布,如随机的过期时间
    
    设置永不过期的key
    
    资源保护,做各种资源的线程池隔离,从而保护主线程池
    

    穿透

    拿着key去取对应的value,不存在,则去db中查找,同时并发量过高将会对db系统造成较大压力

    方案:

    不论返回结果是否为空,都对返回结果进行缓存,空的结果设置一个较短的过期时间
    
    设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截,从而避免了对底层存储系统的查询压力
    

    PHP

    classname :: name

    类中调用同一类中的其他静态资源,可用static::name来代替classname::name

    self static

    self 调用静态方法或属性,可能会升级为父类中的数据

    static 调用只会涉及当前类中数据,不会发生升级现象

    self this parent

    this 指向当前对象的指针

    self 指向当前类的指针

    parent 指向父类的指针


    数组函数

    array_merge 合并数组,返回值为合并后的数组

    array_diff 求数组差集,只比较键值,返回值为差集数组

    array_intersect 求数组并集,只比较键值,返回值为并集数组

    array_unshift将变量加到数组的开头
    function array_unshift ( array &$array, ...$values ){}


    php闭包函数/匿名函数

    使用关键字use连接闭包和外界变量
    匿名函数中的use,作用就是从父作用域继承变量
    且此行为实在函数定义时发生,即若函数定义时,use的变量不存在,则已经找不到变量


    …$args 语法糖

    function add($a, $b ,$c)
    {
        return $a + $b + $c;
    }
    $num = [2,3];
    echo add(1,...$num);
    

    表示使用可遍历变量来代替若干个变量


    Heredoc结构

    heredoc句法结构 <<< 用来表达字符串。在该运算符之后要提供一个标识符,然后换行,接下来是字符串本身,最后要用之前定义的标识符来作为结束标志。

    结束时所要引用的标识符必须在该行的第一列,且该行除了一个分号外,不能包含其他字符。包括缩进和空白,以及制表符。
    示例:

    echo <<<EOTMy name is "$name". I am printing some $foo->foo.
    Now, I am printing some {$foo->bar[1]}.
    This should print a capital 'A': \x41
    EOT;
    

    nowdoc结构

    heredoc类似于双引号字符串,而nowdoc类似于单引号字符串,关键在于不对字符串内容进行解析操作。

    一个nowdoc结构后面的标识符要用单引号括起来,即<<<'EOT',其余都是相同。


    mktime函数

    根据给出的参数返回unix时间戳,若参数非法,返回false
    参数顺序为:分,秒,时,月,日,年


    get_class_vars

    返回由类的默认属性组成的数组,常用在数据实体转数组

    get_class

    返回对象的类名

    method_exists

    检查类的方法是否存在

    ini_get

    获取一个配置项的值(php.ini中的)

    usleep

    延迟执行,单位为微妙,注意是延迟执行


    use的用法

    命名空间使用
    用于trait特性能力的引入
    匿名函数传参


    $_FILE

    当上传文件时,$_FILE接收文件时,出现问题时会记录错误
    如下:

    $_FILES['file']['error']
    其值为 0,没有错误发生,文件上传成功。 
    其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
    其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
    其值为 3,文件只有部分被上传。 
    其值为 4,没有文件被上传。 
    其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 
    其值为 7,文件写入失败。PHP 5.1.0 引进。 看报错的话,应该是临时文件夹没有写权限或者不存在
    

    __invoke()

    尝试以调用函数的方式调用一个对象时,__invoke()方法就会被自动调用
    示例

    <?php
    class CallableClass {
        function __invoke($x) {
            var_dump($x);
        }
    }
    $obj = new CallableClass;
    $obj(5);
    var_dump(is_callable($obj));
    ?>
    

    会输出

     int(5)
     bool(true)
    

    Closure 类

    用来代表匿名函数的类
    匿名函数会产生这个类型的对象,此类带有一些方法,允许在匿名函数创建后对其进行更多控制


    ClassName::class

    返回一个字符串,包含了类 classname 的完全限定名称,即为 命名空间/classname


    phpstorm

    phpstorm中文插件

    在phpstorm 2020.2.3及其以后的版本中,插件市场里会有一个可以将IDE完全汉化的插件,搜索 Chinese,star最多的就是了


    phpstorm 常用快捷键

    F2 快速定位错误或警告

    ctrl + F 在当前文件中查找字符

    ctrl + shift + F 在项目文件中查找字符

    ctrl + alt + L 格式化代码

    alt + F1 快速定位文件位置

    ctrl + F12 查看当前文件的方法和属性列表

    alt + ↑/↓ 在方法间快速移动

    ctrl + G 转到行(会出现对话框)

    alt + Insert 生成代码(GET,SET方法和构造函数)

    ctrl + Y 删除行插入符号

    ctrl + D 复制行

    alt + (table上面的点) 快速弹出vcs菜单(git操作面板)

    ctrl + alt + F12 资源管理器打开文件夹,跳转至文件在磁盘上的位置,为倒置的树形列表