1、function foo( &$var ){ unset($var); } $a=5; foo($a); var_dump($a);输出什么?
输出 int(5) ;
//如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁
2、include 和 require 的区别是什么?为避免多次包含同一文件,可以用(?)语句替代他们?
include: 当引用文件存在错误时,不会中断文件的执行,系统给出一个警告性错误。
require:当引用文件存在错误时,会终止文件的执行,系统报一个致命性的错误。
使用require语句来调用文件时,只要程序一执行,就会立刻调用外部文件。
使用include语句调用文件时,只有程序执行到该代码段时,才会调用外部文件。
include_once:使用该语句导入文件前先检测该文件是否在该页面的其他部分被应用过。如果有,则不会重复引用该文件,程序只能引用一次
require_once:和require功能基本一样,不同的是它先会检查要引用的文件是不是已将在该程序中的其他地方被引用过,如果有,则不会在重复调用该文件
3、简述关键字this、parent、self、static 、const分别为什么意思?
this:当前实例化的对象。parent:指向当前父类的指针。self:当前类的本身。
static:声明静态的方法或属性。const:定义一个常量的关键字。
4、简述这4个方法在php中的用途 __call()、__callStatic()、__get()、__set();
__call( ):当调用的方法不存在或者权限不足时,会自动执行。
__callStatic( ):当调用的静态方法不存在或者权限不足时、会自动执行。
__get():用来获取私有属性; __set():用来设置私有属性。
5、http状态码: 200、301、302、400、401、403、404、500、502、503分别表示什么?
200:表示成功 301:被请求的资源已永久移动到新位置 302:请求的资源现在临时从不同的url响应请求
400:通用的客户端错误状态 401:当前请求需要用户验证 403:服务器已经理解请求,但是拒绝执行它
404:请求失败,请求所希望得到的资源未被在服务器上发现
500:服务器错误响应 502:作为代理工作的服务器执行请求时出现问题
503:由于临时的服务器维护或者过载,服务器当前无法处理请求。
5、http协议有几种请求方法?
get : 发送请求获取服务器上的资源
post:向服务器提交资源让服务器处理
delete:请求服务器删除某资源
put:向指定资源位置上传其最新内容
head:主要用来获取响应头信息
trace:回显服务器收到的请求
options:返回服务器针对特定资源所支持的HTTP请求方法
connect:h t t p 协议中预留给能够将连接改为管道方式的代理服务器
6、有数组12.34,要得到0.34,用程序如何时实现?
$num = 12.34; echo bcsub( $num,floor($num),2 ); //输出0.34
bcsub( ); //将二个高精确度数字相减 1参数减去2参数,3参数保留小数点几位数
floor(); //舍去小数部分取整
7、MySQL中 varchar 与 char 有什么区别?
varchar是可变长度,比如varchar(10),如果小于10,则插入多少就算多少个。
cahr是固定长度,比如char(10),如果插入的字符小于10个,则用空格填满,永远都是10个。
8、优化sql 语句 "SELECT * from product WHERE state=1 OR level =2";
" select * form product where state = 1 union select * from product where level = 2 ";
union //只是简单将两个结果合并后返回。如有重复记录则去掉重复记录。
union //只是单纯的把各个查询组合到一起。不会去判断数据是否重复。
因为使用 or 会导致数据库引擎放弃索引进行全表扫描。
9、优化sql语句"SELECT * FROM t WHERE id IN (2,3)"
"select * form t where id = 1 union select * from t where id = 2 "
如果是连续数值,可以用between代替: 用于 WHERE 表达式中,选取介于两个值之间的数据范围。
"select * from t where id between 2 and 3 "
尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。
10、优化sql语句"SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)"
"select * from t1 where exists( select * from t2 where t2.username = t1.username )"
exists; //用于检查子查询返回时true或false。//外层查询表小于子查询表,则用exists,反之用in。
//返回真时,则外层查询语句将进行查询。//返回假时,外层查询语句不查询或查询不出任何记录
11、优化sql语句SELECT * FROM t WHERE username LIKE '%li%
尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描
SELECT * FROM t WHERE username LIKE 'li%'
优化方式:尽量在字段后面使用模糊查询
12、优化sql语句 SELECT * FROM t2 WHERE score/10 = 9
尽量避免在where条件等号的左侧进行表达式,会导致数据库引擎放弃索引进行全表扫描
优化方式: 可以将表达式、函数操作移动到等号右侧。
select * from t2 where score = 10 * 9
13、优化sql语句 SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'
尽量避免在where条件执行函数操作,会导致数据库引擎放弃索引进行全表扫描
select * from t2 where username like 'li%'
substr( str,pos,len ) //从pos开始位置,截取len个字符(空白也算)
14、以下代码会产生什么?为什么?
$num = 10;
function test(){ $num=$num*10; }
test(); echo $num;
答: 函数内会报错,因为局部作用域内不能访问全局变量、全局作用域内不能访问局部变量。
输出10;
15、php语言的一大优势是跨平台,什么是跨平台?
1、php是一门解释性脚本语言。所以php的程序如果需要运行,首先需要php解释器将php程序文件读入,然后再进行解析执行,所以php的程序编写是面向php解释器,而不是平台,而每个平台都有对应的php解释器版本,所以只要php代码满足对应的解释器,就能运行,也就看上去实现了跨平台运行。
2、PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台。
16、web 开发中数据提交方式有几种?有什么区别?百度使用哪种方式?
可以通过 get 和 post 、ajax 。
使用get方式向服务器发送表单数据时,表单数据将附加在URL属性的末端;
使用post方法发送数据时,数据会放置在主体中发送。
js支持ajax方式创建HTTP请求,可以通过在HTML页面元素的事件处理函数中创建ajax请求,在url参数里携带所需提交的参数,从而提交到后台,这种方式提交后页面不会刷新。
17、什么是会话跟踪技术?在项目中你是怎么样用到的?
当一个客户端连接到服务器时,服务器会出现一个session,客户端会保存一些cookie数据,用于记录用户的状态。一般在项目中用于登录状态的检测以及一些信息的关联。
18、掌握 php 的哪些框架、模板引擎、系统等
tp框架、Smarty、windos和linux操作系统
19、说一下你所掌握的网页前端技术有哪些?
html +css、jq 、js
20、ajax的优势是什么?
1、异步请求,不妨碍用户浏览页面或者其他操作
2、局部刷新、无需重新刷新页面
3、AJAX 基于标准化的并被广泛支持的技术,不需要下载浏览器插件
4、AJAX可以把以前一些服务器负担的工作转嫁到客户端、减轻服务器和带宽的负担
21、列举出10个数据库操作常用的关键字
1、limit (这个可以用来做分页)
mysql>select * from table limit 5,10; //检索记录行从第5条开始取10条,也就是6-15
mysql>select * from table limit 10,-1; //检索记录行从第10条开始,到结束(-1)
mysql>select * from table limit 5; //检索前 5 个记录行
SELECT * FROM t_user WHERE email=?; //由于email 没有索引,会导致全表扫描
SELECT * FROM t_user WHERE email=? LIMIT 1; //优化后,只要找到对应的一条记录,就不会继续想下扫描
2、union & union all (两个结果集合并为一个)
对重复结果的处理: union 进行表连接会筛选掉重复的记录, union all 不会去除重复的记录
对排序的处理: union 将会按照字段的顺序进行排序,union all 只是简单的将两个结果集合并后返回
从效率上来说,union all 比 union 快很多,如果可以确认合并两个结果集中不包含重复数据且不需要排序的话,那么就使用union all。
3、join (联表)
left join (左联接) 返回左表的所有记录和右表中联结字段相等的记录
right join(右联接) 返回右表的所有记录和左表中联结字段相等的记录
inner join(等值联接) 只返回两个表中联接字段相等的行
4、select (查询) update(修改) delete(删除) insert(添加)
5、distinct (去重)
select distinct name from table; //查询table表中name不重复的字段
select distinct * from table; //查询table表中所有不重复的记录行
6、between (在...之间)
select * from table where between age 30 and 40; //查询table表中年龄在30-40之间的用户
7、like (模糊搜索)
select * from table where name like '张%'; //查询匹配张开头的name字段
8、sum(求和)
select sum(age) from table ; //查询所有年龄之和
select sum(price) from goods where id = 1 or id =2; //查询id为1和2的商品价格之和
9、max min(最大值、最小值)
select max(price) from table ; //查询table表中最高的价格
10、 avg (平均值)
select avg(age) from table; //所有人的平均年龄
11、order by (排序)
select * from table order by price; //默认从小到大的正序,按价格从小到大查询出所有记录行
select * from table order by price desc; //按照价格从大到小的顺序查询出所有记录行
12、group by (分组)
select sex,count(*) from table group by sex; //分组查询男女总人数
查询后的结果是: sex|男|女 count(*)|10|8
13、having (分组后筛选,和where用法相似)
select sex,count(*) from table group by sex having sex='男'; //分组只查询男的总人数
查询后的结果是: sex|男 count(*)|10
22、请用原生连接任意数据库并进行增删改查操作
$host = 'localhost'; $database = 'test'; $username = 'root'; $password = 'root';
$selectName = 'harry'; //要查找的用户名,一般是用户输入的信息。
$connection = mysql_connect( $host, $username, $password ); //连接到数据库
mysql_query("set name 'utf-8' "); //编码转化
$selectDb = mysql_select_db( $database ); //选择数据库
$selectName = mysql_real_escape_string($selectName); //防止sql注入
$query = "select * from user where name = '$selectName' " //构建查询语句
$result = mysql_query($query); //执行查询
while( $row = mysql_fetch_row($result) ) { //只要while表达式的值为true就重复执行嵌套中的循环语句。
$name = $row[ 0 ]; $age = $row[ 1 ];
echo "Name : $name Age : $age \n";
} // mysql_fetch_row()从结果集中取得一行作为数字数组
//添加记录
$insertName = mysql_real_escape_string($insertName); //防止sql注入
$insertSql = " inser into user(name,age) values ( '$insertName',18 ) ";
$result = mysql_query( $insertSql );
echo $result ;
//更新记录
$updateSql = " update user set age = 19 where name = $insertName ";
$result = mysql_query( $updateSql );
echo $result;
//删除记录
$deleteSql = " delete from user where age = 19 ";
$result = mysql_query( $deleteSql );
echo $result;
mysql_close( $connection ); //关闭连接
23、简述 private 、protected 、public 修饰符的访问权限
private : 私有的、该类型的属性和方法只能在本类内部访问
protected:受保护的、只有在本类和子类的内部可以访问
public:公开的、类内部外部均可以访问
24、xml 与 html 的主要区别
HTML 是超文本标记语言、是网页制作所必备的、超文本是指页面中内可以包含图片、链接、音乐、程序等非文字元素
XML是可拓展标记语言、被设计用来描述数据、XML标签没有被预定义、需要自行定义标签。
区别:XML被设计用来携带数据; XML被设计用来描述数据,其焦点是数据的内容;
HTML被设计用来显示数据,其焦点是数据的外观;
HTML旨在显示信息,而XML旨在描述信息
XML被设计用来结构化、存储以及传输信息
25、抽象类和接口的概念以及区别?
定义为抽象的类不能被实例化,任何一个类,如果他里面有一个方法是被声明为抽象的、那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式、不能定义具体的功能实现。继承一个抽象类的时候、子类必须定义父类所有的抽象方法。这些方法的访问控制必须和父类一样或者更为宽松。
abstract class AbstractClass{ abstract protected function index(); //要求子类定义这些方法 }
使用接口(interface);可以指定某个类必须实现哪些方法、但不需要定义这些方法的具体内容。
接口中定义的所有方法都必须是公有的、这是接口的特性。
要实现一个接口,使用implements 操作符。类中必须实现接口定义的所有方法、否则会报一个致命错误。
类可以实现多个接口,用逗号分隔多个接口的名称。接口可以通过extends继承。
区别:1、接口中不可以声明变量、但可以声明常量。抽象类中可以声明各种变量。
2、接口没有构造函数、抽象类有。
3、接口中的方法默认为public。抽象类的方法可以是public、protected、private。
4、一个类可以继承多个接口、但只能继承一个抽象类。
26、什么是构造函数?什么是析构函数?作用是什么?
构造函数:__construct();在使用new关键字实例化一个对象时自动执行,通常用于对对象的属性进行初始化
析构函数:_distory();在对象被销毁的时候自动执行、通常用于释放对象所占用的第三方资源。
27、常用的魔术方法有哪些?举例说明
__clone(); //在克隆对象时自动执行。在克隆对象的时候可以同时执行其他的操作、甚至可以阻止对象被克隆。
__toString();//在对象被当做字符串使用时自动执行。兼容对象的字符串调用形式、根据用户需求显示出对象的字符串形态。
__invoke();//在对象被当做函数使用时自动执行。兼容对象的函数调用形式、允许用户像使用函数一样使用对象。
28、如何进行sql优化?
1、可以通过创建索引。索引的作用在于能快速找出某个列中有一特定值的行,mysql能够快速达到一个位置去搜索数据文件、而不必查看所有数据。
2、like语句操作。like "%小明%" 不会使用索引;而like "小明%" 可以使用索引。
3、不要在列上进行运算。select * from table where year(addtate)<2007,这样会在每个行上进行运算、会导致索引生效而进行全表扫描。因此可以改为 select * from table where addtate <"2007 01-01";
4、 避免在where条件等号的左侧进行表达式。比如 select * from table where score/10 = 9;
会导致数据库引擎放弃索引进行全表扫描。可以将表达式移动到等号右侧。
select * from table where score = 9*10;
5、使用union 代替 or 。 同样or会导致放弃索引全表扫描、union会把两个结果合并后返回。
比如 select * from table where id=1 or name = "小明";
select * from table where id = 1 union select * from table where name = "小明";
29、thinkphp 如何防止sql注入?
30、如何开启调试模式?调试模式有什么好处?
在application/config.php 配置文件中把 show_error_msg 显示错误信息的false改为true
app_debug 应用调试模式也改为true; 就开启调试模式了。
调试模式的优势在于: 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试
2、会详细记录整个执行过程
3、模板修改可即使生效
4、发生异常的时候会显示详细的异常信息
31、tp中的url模式有哪几种?默认是哪种?
tp中url模式有三种,
普通模式:只能使用 path_info 的方式访问,所有路由规则均失效。
混合模式:tp5默认的模式、如果为一个地址定义了路由规则、则必须使用该规则访问,如果没有定义规则、则按照普通模式方式访问即可
强制模式:全站所有必须定义路由规则,并且必须使用定义好的路由规则访问。
32、thinkphp框架中 D函数 与 M函数 的区别是什么?
thinkphp 中D函数和M函数都用于实例化一个模型类、 M函数 用于高效实例化一个基础模型类。
而D函数 用于实例化一个用户定义模型类。
M函数使用场景:
1、对数据表进行简单的CURD操作而无复杂的业务逻辑时
2、只有个别表有较为复杂的业务逻辑时、将m函数与实例化CommonModel 类结合使用
D函数使用场景:
1、需要使用ThinkPHP模型中一些高级的功能、如自动验证、关联模型等
2、业务逻辑比较复杂时、且涉及的表较多
3、将业务逻辑定义在了自定义的模型类里面,而想在操作中实现这些业务逻辑
33、双引号和单引号的区别?
php中双引号里面的字段会经过编译器解释、然后在当做html代码输出。
单引号里面的不进行解释、直接输出。
从字面上就可以看出,单引号比双引号要快了。
所以如果内部只有纯字符串的时候,用单引号(速度快),内部有别的东西(如变量)的时候,用双号引更好点
34、常用的超全局变量(8个)
超全局变量是在全部作用域中始终可用的内置变量。
$get : get传送方式
$post : post传送方式
$request : 可以接受到 get 和 post 两种方式的值
$global : 引用全局作用域中可用的全部变量
$files : 上传文件使用
$server : 系统环境变量
$session : 用于会话控制
$cookie : 用于会话控制
$_new : 服务器换环境变量
35、优化数据库的方法
可以通过索引:索引的作用在于能快速找到某个列中有一特定值的行。mysql能到达一个位置去搜索数据文件、而不必查询所有文件。
选取合适的字段属性:mysql能够很好的进行大数据量的存取、但一般来说数据库中的表越小,在它上面的执行的查询速度也就越快。因此在创建表的时候、为了获取更好的性能、我们可以将表中的字段宽度尽可能的设小。比如在定义邮政这个字段时、如果将其设置char(255),显然给数据库增加不必要的空间、使用varchar也是多余、因为它的长度是固定的、因此使用char(6)就可以很好的完成任务。
数据库的事务:事务的作用是:要么语句块的每条语句都成功、要么都失败、保持了数据库中数据的一致性和完整性。比如现在有某条数据要同时插入两张相关联的表中、可能会出现这种情况、第一张表更新成功后、数据库突然出现意外状况、导致第二张表没有操作成功。这样会造成数据的不完整、甚至破坏数据、要避免这种情况发生就要使用事务。
事务以BENGIN关键字开始、COMMIT关键字结束、在这期间只要有一条sql操作失败、那么ROOLBACK命令就能把数据库恢复到BENGIN开始之前的状态。
事务的另一个重要的作用是当多个用户同时使用相同的数据源时、它可以利用锁定数据的方法为用户提供一种安全的访问方式。这样可以保证用户的操作不被其他用户干扰。
36、(mysql)请写出数据类型( int char varchar datetime text )的意思; varchar 和 cahr 有什么区别?
int :整数类型
datetime:日期时间类型 "2019-04-22 18:00:00"
text :字符串类型
char:固定长度,char(4)不管存入几个字节,都将占用4个字节
varchar:可变长度,根据实际存入的字符,计算长度
37、谈谈mvc的认识
mvc是一种设计模式、它让我们把业务逻辑和具体的数据显示区分开、进行分层。
m : 是model 模型、完成具体的业务逻辑。
v : view 视图、负责展示信息
c: controller 控制器、调用应用流程、接收输入并传送给model和view
mvc模式的定义是model、controller、view三者之间的桥梁。controller以及view都依赖于model,因为controller和view都得向model发送数据请求。数据通过controller输入到你的系统当中,并最终通过view显示出结果。
38、简述 cookie 的设置及获取过程
//使用setCookie创建一个名为username,值为小明,过期时间为10秒的cookie;
setCookie( "username","小明",time()+10 ) //setCookie("名称","值",过期时间);
//用$_COOKIE[ ] , 取出username的值,放在变量$name 中。然后打印出来。
$naem = $_COOKIE[ 'username' ]; echo $name;
运行代码,第一次会出现报错、报错的原因是$_COOKIE['username']的值不存在。再次刷新、cookie的值就出来了。
过了10秒后,再次刷新,又会报错、那是因为cookie缓存以及超过了缓存时间。只要再次刷新cookie值又会有了。
如果不设置时间,浏览器不关时、能够永远访问不会过期、当浏览器关闭时、就无法访问了。
39、php 读取文件内容的几种方法和函数?
file_exists()检查文件或目录是否存在。
一、fopen函数:打开文件或者 URL。
feof函数: 检查是否已经到达文件的结尾。到达返回true,未到返回false。
fgets函数: 从打开的文件中返回第一行。 fclose函数:关闭一个打开的文件
$my_file = fopen( "myfile.txt","r" );
while( !feof($my_file) ){
$line = $fgets($my_file);
echo $line;
}
fclose( $my_file );
二、readfile 函数 :读入一个文件并写入到输出缓冲。成功则返回文件中读入的字节数。
$myfile = readfile('./myfile.txt');
echo $myfile;
三、file_get_contents 函数 : 把整个文件读入一个字符串中。
$myfile = file_get_contents( 'myfile.txt' );
echo $myfile;
四、file 函数: 把整个文件读入一个数组中
$myfile = file( 'myfile.txt' );
print_r( $myfile );
40、如果你想要自动加载类、下面哪种函数声明时正确的?
php 中 魔术方法 __autoload(); //通过定义这个函数来启用类的自动加载。
//这样非常容易避免了,当一个项目非常大时,不停的require文件
tp: Loader::addClassMap
41、php程序使用utf-8编码、以下程序输出的结果是什么?
42、用php实现冒泡排序、将数组$a = array() 按照从小到大的方式进行排序
冒泡排序:1、比较相邻的元素。如果第一个比第二个大,就交换他们两个
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
43、表单提交中 get 和post 的异同点
1、get是从服务器上获取数据 , post是向服务器传送数据。
2、对于get方式,服务器端用 Request.QueryString 获取变量的值。
post方式,服务器端用Request.From 获取提交的数据。
3、get传送的数据量比较小、不能大于2kb。 post传送的数据量较大、一般被默认不受限制。
4、get安全性比较低、post安全性较高。
5、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
44、请用递归实现一个阶乘求值算法
阶乘就是:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。
自然数 n 的阶乘写作n!; n!=1x2x3..xn。
function demo($a){
if( $a>1 ){ $r = $a*demo($a-1) }else{ $r = $a; }
return $r; }
$a = 6; echo $a.'的阶乘的值是'.demo($a);
45、php 不适用第三个变量实现交换两个变量的值
46、用php打印出前一天的时间格式 2017-09-11 10:07:24
$data = date("Y-m-d h:i:s",strtotime("-1 day"));
echo $data;
$data = date( "y-m-d h:i:s",time()-24*3600 );
echo $data;
47、session 与 cookie 的区别是什么?请从协议,产生的原因
因为http是无状态协议、一旦数据交换完毕、客户端与服务器端的连接就会关闭。再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制、cookie就顺应而生。
session是另一种记录客户端状态的机制。不同的是cookie保存在客户端浏览器中。而session保存在服务器上。
客户端浏览服务器的时候、服务器把客户端信息以某种形式记录在服务器上。这就是seesion。
区别:
1、cookie是存放在浏览器端、大多数情况下单个域名最多保存20个cookie。每个cookie保存的数据不超过4k。
2、session存储在服务端、默认是以文件的形式存储。也可以存储在数据库和redis等缓存内存中。
3、session是占用的服务器内存、所以内存越大、能存的值越大、原则上讲无上限、一般用于存储对安全要求较高的重要数据。
1、保存位置:cookie存放在浏览器端、session存储在服务器
2、生命周期:cookie用户浏览器关闭、理想的话可以长期保存
3、设置方法:setCookie('name','admin',10)、$_session['name']='admin';
4、安全方面:数据在服务器端安全、数据在客户端不安全
48、isset() 和 empty() 区别?
isset() : 一般用来检测变量是否设置。变量不存在或者变量存在值为null返回false、变量存在且值不为null返回true。只能用于变量。
empty() : 判断值是否为空。若变量不存在 或 存在值为0、'0'、null、false、array()、var、$var;以及没有任何属性的对象、都返回true。其余则返回false。只能用于变量。
49、 mysql 的存储引擎,myisam 和innodb 的区别
innodb : 专注数据的完整性和安全性、涉及利益、金钱交易,这种需要严谨性、安全性比较高的、例如股票、
主要区别:
1、myisam是非事务安全型的、innodb是事务安全型的
2、myisam只支持表锁、innodb支持行锁、表锁。
3、myisam不支持外键、innodb支持外键
4、因为myisam相对简单、所以效率上要优于innodb
5、innodb表相对myisam表更加安全
应用场景:
myisam : 如果应用中需要大量的select 查询,则使用myisam
innodb;如果你的数据执行大量的insert、update,出于性能方面的考虑、应该适应innodb
50、如何实现字符串翻转
strrev(); 函数反转字符串。
echo strrev( 'hello' );
51、php 序列化和反序列化用的函数
序列化函数serialize()。//将变量转换为可保存或传输的字符串的过程
$arr = [ 'name'=>'小明','age'=>18,'length'=>100 ];
$a = serialize( $arr ); echo $a;
输出: a:3:{ s:4:"name";s:6:"小明"; s:3:"age";i:18; s:6:"length";i:100; }
//返回序列化之后的字符串,可以存储于任何地方。
file_put_contents( './serialize.txt',$a ); //将序列化字符串存到记事本中
反序列化函数unserialize()。//对一个以序列化的字符串,将其转化为原来的变量。
$str = file_get_contents( './serialize.text' ); //读取记事本的数据
$arr = unserialize( $arr ); //反序列化
print_r( $arr ); //输出原先变量的值(数组)
序列化可以将PHP中 对象、类、数组、变量、匿名函数等,转化为字符串,这样用户就方便储存和传输,对服务器或web中减轻一定的压力。
52、数据库中的事务是什么?
数据库的事务:要么语句块中的每条语句都成功、要么都失败。可以保持数据库中数据的一致性和完整性。
比如要把某个数据同时插入到两张相关联的表中、可能会出现这种情况、第一个表成功更新后、数据库突然出现意外状况、导致第二个表中的操作没有完成。这样会造成数据的不完整、甚至会破坏数据库中的数据。要避免这种情况发生,就应该使用事务。
事务以BEGIN关键字开始、COMMIT关键字结束。在这之间任何一条sql操作失败、那么ROOKBACK命令就可以把数据库恢复到BENGIN开始之前的状态。
事务的另一个重要作用是当多个用户同时使用相同的数据源时、它可以利用锁定数据库的方法来为提供一种安全的访问方式。这样可以保证用户的操作不会被其他用户干扰。
53、写一个方法获取文件的拓展名
54、说明php 中的传值 和传引用的区别?并说明传值什么时候传引用
传值:将实参赋值给形参,那么对形参的修改不会影响到实参的值。
$a = 1 ; $b = $a ; $b = 2 ; echo $a,$b; //输出: 12
传引用:真正的以地址的方式传递参数,传递以后,形参和实参都是同一个对象、只是名字不同。
对形参的修改将会影响实参的值。
$a = 1 ; $b=&$a ; $b = 2; echo $a,$b; //输出: 22
55、给出数组$array=array( 1,6,9,5,8,3,7,2,4 ),写一方法对数组$array进行排序,排序后的结果为$array( 1,2,3,4,5,6,7,8,9 )
$array = array( 1,6,9,5,8,3,7,2,4 );
asort( $array ); //根据值,以升序对数组进行排序。 print_r( $arr ); //输出1,2,3,4,5,6,7,8,9
//也可以使用冒泡排序
//输出 123456789
56、面向对象的特征有哪些?
php面对对象编程的三个基本特征分别为封装、继承、多态。
封装:将方法、属性等封装到一个类、通过声明访问权限控制访问。
继承:通过继承父类、能访问到其父类所拥有的非私有的方法和属性、增加代码重用性
多态:能够重写继承对象的方法、体现了对已存在的代码的可替换性和灵活性
57、在执行 mysql 数据库 insert 时应该注意的问题有哪些?
插入操作时,如果字段是系统关键字、会提示SQL语句有问题、需要给关键字段加上``反引号就可以。不必更改字段。
58、用javascript 来实现验证邮箱地址不能是中文的方法?
\u4E00-\u9FA5 : 匹配所有汉字。
\w : 匹配字母或数字或下划线或汉字 等价于 '[ ^A-Za-z0-9_ ]'。
\d : 匹配数字
+ : 匹配前面的子表达式一次或者多次
reg.test(email) == /[ \u4E00-\u9FA5 ]/.test( email ); //测试是否匹配正则表达式
59、输出下个月的第一天
echo date('Y-m-01',strtotime("+1 month")); //2019-05-01