企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 1、echo、print、print_r/var_dump的区别 ``` echo():可以一次输出多个值,多个值用逗号隔开,echo是语言结构,而并不是真正的函数,因此不 能作为表达式的一部分使用。 print():打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false print_r():可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头 var_dump():判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一 个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。 ``` ### 2、include、include_once、require、require_once的区别 ``` include():使用include应用外部文件时,只有代码执行到include语句时,外部文件才会被引入并读取,当所引用的外部文件 发生错误时,系统只给出一个警告,而整个php文件则继续向下执行。 include_once():使用include_once语句会在导入文件前先检测该文件是否在该页面的其他部分被应用过,如果有,则不会重复 引用该文件,程序只能引用一次。 require():使用require语句来调用文件时,如果调用的文件没找到,require语句会输出错误信息,并且立即终止脚本处理 require_once():使用require_once语句时,会先检查要引用的文件是不是已经在该程序中的其他地方被引用过,如果有,则不 会在重复调用该文件,在同一个页面中引用了两个相同的文件,那么在输出时,只有第一个文件被执行,第二次引用的文件 则不会被执行。 ``` ### 3、empty、isset、is_null的区别 ``` empty:如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE isset: 检测变量是否设置;如果 var 存在则返回 TRUE,否则返回 FALSE。如果已经使用 unset() 释放了一个变量之后,它 将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。 is_null:当参数满足下面三种情况时,将返回TRUE,其它的情况就是FALSE。 * 它被赋值为NULL * 它还没有赋值 * 它未定义,相当于 unset(),将一个变量 unset()后,不就是没有定义吗 $myvar = NULL; var_dump(is_null($myvar)); // TRUE $myvar1; var_dump(is_null($myvar1)); // TRUE Notice: Undefined variable $num = 520; unset($num); var_dump(is_null($num)); //TRUE Notice: Undefined variable var_dump(is_null($some_undefined_var)); //TRUE Notice: Undefined variable $myvar = 0; is_null($myvar); // FALSE $myvar = FALSE; is_null($myvar); // FALSE $myvar = ''; is_null($myvar); // FALSE ``` ### 4、双引号和单引号的区别 ``` 一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析. 双引号中的变量和特殊字符 (\r\n) 会被转义,单引号中的内容不会被转义 ``` ### 5、session和cookie的区别 ``` (1)cookie数据存放在客户的浏览器上,session数据放在服务器上。 (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。 (3)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。 (4)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE ``` ### 6、get和post的区别 ``` (1)GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接; (2)POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。 (3)GET请求在URL中传送的参数是有长度限制的,而POST没有。 (4)POST相对于GET更加安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 ``` ### 7、传值与传引用的区别 ``` 传值:把实参的值赋值给形参,对形参的修改不会影响到实参的值 传引用:真正的以地址的方式传递参数,传递以后,行参和实参都是同一个对象,对行参的修改将影响实参的值   ``` ### 8、==和===的区别、“!==”与“!=”的区别 ``` ===比较两个变量的值和类型;==比较两个变量的值,不比较数据类型。 ``` ### 9、->和=>的区别 ``` ->用来引用对象的成员(属性与方法) =>只用来数组赋值 ``` ### 10、?? 与 ?:区别 ``` ?? :用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值 ?:常用于三元运算符,问号的作用是选择条件作为程序继续执行的分支 ``` ### 11、跳出循环:exit、return、break、continue之间的区别 ``` exit:用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。 return: (1)从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2)返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3)return 后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 break: (1)当它在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转 向循环语句下面的语句。 (2)当它出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 continue:终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。 ``` ### 12、function_exists、method_exists、class_exists、property_exists、is_subclass_of 的区别 ``` function_exists( string $function_name ) : 函数用于检测函数是否被定义,检测的函数可以是 PHP 的内置函数,也可以 是用户的自定义函数。如果被检测的函数存在则返回 TRUE ,否则返回 FALSE 。 method_exists ( mixed $object , string $method_name ) :检查类的方法是否存在于指定的 object中。如果检测的方法存 在与指定的对象中,则返回true,否则返回false。 class_exists ( string $class_name [, bool $autoload = TRUE ] ) :检查类是否被定义。第一个参数为检测的类名(如果 使用了命名空间后,需要使用完整的带命名空间的类名,如:app\admin\service\UserService ); class_exists()会默认将 会尝试调用 _autoload,如果不想让 class_exists() 调用_autoload,可以将 autoload 参数设为 FALSE。 property_exists([mixed] $class,string $property):判断类或对象中的属性是否存在(可无视属性权限),存在返回true, 否则返回false,$class 可以是类名(字符串)或类对象,$property为属性的名字 is_subclass_of ( object $object , string $class_name ):判断一个对象是否为一个类的子类,返回bool值 ``` ### 13、PHP四种网页重定向方式 ``` header('location:http://www.baidu.com'); echo '<meta http-equiv="refresh" content="1;http://www.baidu.com">'; echo '<script>window.location.href="http://www.baidu.com"</script>'; echo file_get_contents('http://www.baidu.com'); ``` ### 14、php三种合并数组的方式 ``` array_merge($arr, $arr_1); // 合并数组,如果健名为整数,键名会从 0 开始进行重新索引。 array_merge_recursive($arr, $arr_1); // 递归合并数组,不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组 $arr + $arr_1 // 保留键名,追加数组 ```