21 11 2021

PHP的一些面试题以及基础知识

        1、PHP中字符串和数字加减

            1.1、7.0及以下版本

            echo "1" + 1 、echo "1" - 1 ,解析成数字参与运算;

            echo "9fdd" - 1 字符串中第一位是数字,在运算时候,会解析字符串中第一个数字参与运算,数字以后的字符忽略;

            echo "fd6fdf" - 1 会直接忽略整个字符串,输出 - 1 ;

             5.6.png

            

            7.0.png

            1.2、7.1及以上版本

            echo "1" + 1 、echo "1" - 1 ,解析成数字参与运算;

            echo "9fdd" - 1,会输出8,但是会提示语法错误;

            echo "fd6fdf" - 1 ,忽略字符串部分,直接输出 - 1, 并且语法有警告错误;

            

            


            


            


        2、PHP是单线程还是多线程

            image.png

        3、如何保证token不被盗用?

        ① app端

        前端第一次请求登录的时候把ip地址或者设备id携带过来(就只有第一次),保存在后数据库或者redis缓存中,后面的请求token对应的ip地址或者设备id不一样,则视为非法请求。出现非法请求以后,必须使用注册的手机号进行验证码验证,验证通过则解除安全提示(原来的token过期不再使用),否则不让登录。(最好是携带设备id,因为ip有可能换流量换WIFI等.)

        4、php中isset()函数和empty()函数的区别?

        ① 共同点

        都可以判断一个变量是否为空;都返回布尔型,即 true  或 false

        ② 不同点

        empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告;empty() 5.5 版本之后支持表达式了,而不仅仅是变量。

        isset() 函数用于检测变量是否已设置并且非 NULL。如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。