PHP面试题

前提是你 提交于 2020-02-29 00:22:07

此面试题根据云知梦免费课程总结整理得出。

选择题:

  1. 输出为 Mozilla/5.0 (Windows NT 10.0; Win64; x64) 时,可能的输出语句是?
A. $_SERVER['AGENT'];
B. $_SERVER['USER_AGENT'];
C. $_SERVER['HTTP_USER_AGENT'];
D. $_SERVER['HTTP_USER_AGENT_TYPE'];

答案:C
  1. 下面功能PHP无法实现的是?
A. 服务端脚本运行
B. 客户端图形界面(GUI)程序
C. 命令行脚本运行
D. 浏览器端执行 DOM 操作

答案:B D
  1. 下面说法不正确的是?
A. PHP有四种标量类型:布尔型(bool)、整型(int)、字符串(string)、浮点型(float)
B. 浮点型(float)与双精度型(double)是同一种类型
C. 复合类型包括:数组(array)、对象(object)、资源(resource)
D. 伪类型包括:混合类型(mixed)、数字型(number)、回调(callback)

答案:C
资源(resource)和NULL属于特殊类型
  1. 执行代码后<?php echo function_exists('print'); ?>,输出的结果是?
A. false
B. FALSE
C. true
D. 空

答案:D
print是语法结构不是函数所以function_exists('print')返回false,echo false为空
  1. 下面不是PHP语法结构的是?
A. array
B. eval
C. each
D. list

答案:C
each是函数不是语法结构,常见的语法结构:array、list、echo、print、eval、include、require
  1. 执行以下代码输出的结果是?
<?php
$bool = true;
echo gettype($bool);
echo is_string($bool);
?>

A. boolean
B. boolean0
C. booleanFALSE
D. booleanfalse

答案:A
  1. 写出下面代码执行的结果:
<?php
$a = 12;
$b = 012;
$c = 0x12;
echo $a,$b,$c;

答案:12 10 18
数字前面加0,代表是8进制的数
前面加0x(大小写都可以),代表是16进制的数
  1. 下面代码执行一的结果是?
<?php
echo 1 + 2 + "3 + 4 + 5";
?>

A. 0
B. 3
C. 6
D. "33 + 4 + 5"

答案:C
字符串转数字:从头开始查找字符串中的数字部分,直到找到非数字为止,然后将找到的数字部分转int。如果第一个字符就不是数字就返回0。
  1. 代码<?php var_dump(? == 'A'); ?>加入下面哪个选项后输出true?
A. ord(65)
B. chr(65)
C. 65 + ''
D. '' + 65

答案:B
ord():将字符转为 ascii 码(0-127)
chr():将 ascii 码转为字符
php 大于 7.2.0 版本可以使用 mb_ord()、mb_chr(),支持utf-8
  1. 下面代码执行后的结果是?
$a = array(
    1 => 5,
    5 => 8,
    22,
    2 => '7',
    81
);
echo $a[7];
echo $a[6];
echo $a[3];

答案:81 22 空
数组中未指定下标项,其下标等于前面最大下标值加1
  1. 下面代码执行后输出的结果是?
<?php
$a['bar'] = 'hello';
echo $a['bar'];
echo $a[bar];
?>

A. hello
B. 空 空
C. 报错
D. hellohello

答案:D
  1. 下面代码执行后输出的结果是?
<?php
echo 1 >> 0;
echo 2 >> 1;
echo 3 << 2;
?>

A. 012
B. 106
C. 1112
D. 123

答案:C
左移右移指的是对原数据换算成二进制之后的操作
  1. 下面代码执行后的结果是?
<?php
for ($i = 0;  i < 10; $i++) {
    echo $i;
}
?>

A. 0123456789
B. 012345678910
C. 无输出
D. 死循环

答案:D
i < 10,不是$i < 10
  1. 下面对于echo,print的描述正确的是?
A. echo,print都可以打印多个参数
B. print可以打印多个参数,echo不可以
C. echo可以打印多个参数,print不可以
D. echo,print都不可以打印多个参数

答案:C
  1. 对于以下代码
<?php
$fruis = array(
    "strawberry" => "red",
    "banana" => "yellow"
);

能够输了yellow的代码是?

A. echo "banana is {$fruis['banana']}";
B. echo "banana is $fruis['banana']";
C. echo "banana is {$fruis[banana]}";
D. echo "banana is $fruis[banana]";

答案:ACD
  1. 下面代码执行后的结果是?
<?php
function change() {
    static $i = 0;
    $i++;
    return $i;
}
echo change();
echo change();
?>
答案:1 2
  1. 下面代码执行后输出的结果是?
<?php
$foo = 'test';
$bar = <<< EOT
$foo bar
EOT;
echo $bar;

A. $foo bar
B. 'EOT'$foo bar EOT
C. test bar
D. 'EOT'test bar EOT

答案:C
  1. 下面代码执行后,$b的值是?
<?php
$a = 3;
$b = 4;
if ($a || $b = 5) {
    echo 'hello world';
}

A. 4
B. 5
C. 3
D. false

答案:A
  1. 下面的表达式中不能将两个字符串$s1和$s2合并成一个字符串的是?
A. $s1 + $s2
B. "{$s1}{$s2}"
C. implode('', array($s1, $s2));
D. $s1.$s2

答案:A
  1. 下面代码执行后,$array数组中包含的值是?
<?php
$array = array('1', '1');
foreach ($array as $k => $v) {
    $v = 2;
}
?>

A. array('2', '2')
B. array('1', '1')
C. array(2, 2)
D. array(NULL, NULL)

答案:B
  1. cron后台常驻程序(daemon)用于?
A. 负责文件在网络中的共享  
B. 管理打印子系统Manages the printing subsystem  
C. 跟踪管理系统信息和错误  
D. 管理系统日常任务的调度(scheduling)

答案:D
  1. 怎么了解当前目录下还有多大空间?
A. df /
B. du /
C. du .
D. df .

答案:C
du:显示每个文件和目录的磁盘使用空间
df:显示磁盘分区上可以使用的磁盘空间
  1. 有一个备份程序mybackup,需要在周一至周五下等一点和晚上八点各运行一次,下面哪一条crontab的项可以完成这项工作?
A. 0 13,20 * * 1,5 mybackup
B. 0 13,20 * * 1,2,3,4,5 mybackup
C. * 13,20 * * 1,2,3,4,5 mybackup
D. 0 13,20 1,5 * * mybackup

答案:B
分 时 日 月 周
  1. 下面哪条命令可以把f1.txt复制为f2.txt?
A. cp f1.txt|f2.txt
B. cat f1.txt|f2.txt
C. cat f1.txt>f2.txt
D. copy f1.txt|f2.txt

答案:C
  1. 使用下列哪项命令可以查看Linux的启动信息?
A. mesg -d
B. dmesg
C. cat /etc/mesg
D. cat /var/mesg

答案:B
  1. 在vi中退出不保存的命令是?
A. :qt
B. :w
C. :wq
D. :q!

答案:D
  1. 下面哪个选项没有将john添加到users数组中?
A. $users[] = 'john';
B. array_add($users, 'john');
C. array_push($users, 'john');
D. $users ||=  'john';

答案:B D
array_add没有定义此函数
$users ||=  'john';语法错误
  1. 下列不属于javascript语法关键字的是?
A. var
B. $
C. function
D. while

答案:B
  1. 下列不属于javascript DOM操作事件的是?
A. onclick
B. onkeydown
C. onbodyload
D. onmouseover

答案:C
  1. 下列PHP函数中不能直接在页面输出字符串的是?
A. echo
B. sprintf
C. printf

答案:B
  1. 在PHP 中,'+'操作符的功能不包括:
A. 字符串连接
B. 数组数据合并
C. 变量数据相加

答案:A
使用 + 进行数组合并,如果下标相同前面的覆盖后面的

简答题:

  1. 用于PHP获取当前时间并打印,打印格式:2020-2-25 22:47:08
echo date("Y-n-d H:i:s");

Y 4位数字完整表示的年份,例如:1999 或 2003
y 2位数字表示的年份,例如:99 或 03
m 数字表示的月份,有前导零 01 到 12
n 数字表示的月份,没有前导零 1 到 12
d 月份中的第几天,有前导零的 2 位数字 01 到 31
j 月份中的第几天,没有前导零 1 到 31
H 小时,24 小时格式,有前导零 00 到 23
h 小时,12 小时格式,有前导零 01 到 12
G 小时,24 小时格式,没有前导零 0 到 23
g 小时,12 小时格式,没有前导零 1 到 12
  1. 字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?
字符串转数组:
    - str_split ( string $string [, int $split_length = 1 ] ) : array 将一个字符串转换为数组
    - explode ( string $delimiter , string $string [, int $limit ] ) : array 使用一个字符串分割另一个字符串
    - preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) : array 通过一个正则表达式分隔字符串
数组转字符串:
    - implode ( string $glue , array $pieces ) : string 将一个一维数组的值转化为字符串
字符串截取:
    - substr ( string $string , int $start [, int $length ] ) : string 返回字符串 string 由 start 和 length 参数指定的子字符串
    - mb_substr()支持中文截取,用法同substr()
字符串替换:
    - str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed 返回将 subject 中全部的 search 都被 replace 替换之后的结果
    - preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed 搜索`subject`中匹配`pattern`的部分, 以`replacement`进行替换(支持字符串或字符串数组)
字符串查找:
    - strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int 返回 needle 在 haystack 中首次出现的数字位置
    - strrpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int 返回 needle 在 haystack 中最后出现的数字位置
    - preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int 搜索subject与pattern给定的正则表达式的一个匹配
    - preg_match_all() 匹配多次,用法同preg_match()
  1. 在PHP的类中public,protected,private,interface,abstract,final,static的含义是?
- public 公有的属性或方法(默认)
- protected 受保护的属性或方法
- private 私有的属性或方法
- interface 对象接口
- abstract 抽象类或方法
- final 类和方法不能被继承或覆盖
- static 静态方法或属性
  1. 如何把字符串"02/26/2020"转换成"2020-02-26"?
<?php
$date = "02/26/2020";
echo preg_repalce('/(\d+)\/(\d+)\/(\d+)/', '$3-$1-$2', $date);
?>
  1. 解释什么是左连接、右连接、内连接、索引。
- 左连接 left … join … on
    是以左边的表为主导,先输出左边表的所有数据,右边表匹配的输出,不匹配的为null
- 右连接 right … join … on
    是以右边的表为主导,先输出右边表的所有数据,左边表匹配的输出,不匹配的为null
- 内连接 inner … join … on
    必需同时符合左右表条件的内容才会输出,相当于普通多表查询
- 索引
    是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,常用的索引有:主键索引、唯一索引和普通索引
  1. 写一个函数,尽可能高效的从一个标准的url里取出文件的扩展名,已知url如下:$url = "http://www.demo.com/index.php?id=1&name=zhangsan"
<?php
$url = "http://www.demo.com/index.php?id=1&name=zhangsan";
function getExtensionByUrl($url) {
    $arr = parse_url($url);
    $arr2 = pathinfo($arr['path']);
    return $arr2['extension'];
}
echo getExtensionByurl($url);
?>
  1. 什么是MVC?
MVC模式是把项目的组织架构分解成3个清晰的任务
- M(model)模型,主要操作数据库
- V(view)视图,主要负责图形界面逻辑及展示信息
- C(controller)控制器,负责转发请求,对请求处理
  1. 描述一下大流量高并发网站的解决方案。
- 服务器负载均衡
- 用nignx(最大连接数30000)替换apache(最大连接数3000)
- 页面静态化
- 使用数据缓存(memcache、redis)
- 数据表合理使用索引
- 减少客户在服务器上的连接断开时间
- php代码优化
  1. 如何设计或配置MySQL才能达到高效使用的目的?
- SQL语句优化
- 合理使用字段索引,降低影响行数或扫描行数
- 修改MySQL并发连接数:max_connections
- 修改MySQL连接关闭时间:wait_timeout
- 分库分表
  1. 如果防止SQL注入?
- 进行SQL预编译处理
- 开启addslashes在特殊符号前加\
- 使用htmlspecialchars对字符串转实体
  1. 如何防盗链?
可以检测访问源的Referer来进行过滤,静态资源可以在nginx或apache中直接配置Referer检查,动态资源可以使用$_SERVER['HTTP_REFERER']检查Referer.
  1. 一个安全的用户登录系统需要注意注意哪些方面?
- 使用post提交数据
- 限制错误密码登录次数
- 使用验证码防止机器破解
- 同时做好前端和后端的数据验证
  1. 什么是面向对象?主要特征是什么?
- 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰
- 主要特征:封装、继承、多态
  1. COOKIE与SESSION的区别是什么?请从协议,产生的原因与作用说明。
- http是无状态的协议,不能区分用户是否是从同一个网站而来,同一个用户请求不同的页面不能看作是同一个用户
- cookie以文本格式存储在浏览器上,存储量有限
- session存储在服务端,可以无限量存储并且比cookie更安全
- session依赖cookie进行传输,如果浏览器禁用cookie可用url参数替代
  1. http状态码中302、403、500的含义是?
- 302 重定向
- 403 服务器拒绝访问
- 500 服务器内部错误

常见状态码:
- 200 请求成功
- 304 未修改
- 401 没有访问权限
- 404 请求失败
  1. Linux下建立压缩包,解压缩包的命令是?
- 建立压缩包:tar czf test.tar.gz test.php
- 解压缩包:tar xzf test.tar.gz
  1. 请写出数据类型int、char、varchar、datetime、text的含义,其中charvarchar的区别?
- int 整数类型
- char 固定长度字符
- varchar 变长字符
- datetime 日期时间类型
- text 文本字符串
- varchar 是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间,查找效率要 char 型快
  1. MyISAM和InnoDB的区别是什么?
- MyISAM不支持事务,InnoDB支持事务
- MyISAM时表锁,InnoDB是行锁
- MyISAM 不支持外键,InnoDB支持外键
- MyISAM 保存表的总行数,InnoDB不保存
  1. isset()和empty()有什么区别?
- isset ( mixed $var [, mixed $... ] ) : bool 检测变量是否设置,并且不是 NULL
- empty ( mixed $var ) : bool 检查一个变量是否为空
    "" (空字符串)
    0 (作为整数的0)
    0.0 (作为浮点数的0)
    "0" (作为字符串的0)
    NULL
    FALSE
    array() (一个空数组)
    $var; (一个声明了,但是没有值的变量)
  1. 如何在页面之间传递变量?
- get
- post
- ajax
- cookie
- session
  1. 写出一个匹配标准url正则表达式。
/^http[s]?:\/\/[\w+\.]+\w+$/
  1. 在数据库test中有一个student表,有name、class、score字段,分别代表姓名、班级、成绩。
  • 查出每个班级中的学生,按成绩降序排序
select * from student orde by class asc,score desc;
  • 查出每个班的及格人数和不及格人数,格式为:class、及格人数、不及格人数
select class,sum(if(score>=60,1,0)) as 及格,sum(if(score<60,1,0)) as 不及格 from student group by class;
  1. 面向对象中接口和抽象类的区别是什么?
- 接口是用interface来声明,但不能用class来声明,因为接口不是类,抽象类用abstract关键字在类前声明,且有class声明为类
- 接口是用implements让普通类在类里实现接口的详细方法,抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法
- 接口不能有属性、普通方法、构造函数,可以有常量,抽象类可以有属性、普通方法、抽象方法和构造函数
- 接口中的方法都是public类型,抽象类中的方法可以使用private、protected或public
- 抽象类的抽象方法一定要用abstract来声明,而接口则不需要
- 一个类可以同时实现多个接口,但是只能实现一个抽象类
- 相同:函数体内不能写任何东西,连两个大括号都不能写
  1. 如下user表结构:
名称 类型 说明 备注
uid int unsigned 主键
name varchar(20)
age tinyint unsigned
  • 增加一个性别字段sex,写出修改语句
alter table user add column sex char(1) not null default "男" after age;
  • 查出年龄介于20岁到30岁之间的用户
select * from user where age between 20 and 30;
  • 给年龄字段加上索引
alter table user add index index_age(age)
或
create index index_age on user(age)
  1. html表单中GET和POST提交方法的区别是?
- get通过URL传递参数安全性低,post通过request body传递参数相对比较安全
- get最多传2K左右的数据,post无限制(php.ini可配置)
- get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求
  1. 求两个日期的差数,例如2019-11-9 ~ 2020-01-21相差多少天?
echo (strtotime('2020-01-21') - strtotime('2019-11-9')) /86400;
  1. 写出如下程序的输出结果:
<?php
$test = 'hello';
$abc = &$test;
unset($test);
echo $abc;
?>

hello
  1. 在空表news中,字段id为自增主键,批量插入17条数据后,发现最后三条数据有误,删除此三条记录后重启MySQL数据库,再重新插入三条记录,请问最后一条记录的id值是多少?
- MyISAM引擎:18
- InnoBD引擎:20
  1. 写出一种验证11位手机号码的正则表达式。
- 简单:/^1[3-9][\d]{9}$/
- 严格:/^[1](([3][\d])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][\d])|([9][1,8,9]))[\d]{8}$/
  1. 请写一个函数,实现字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"。
<php
function changeStr($str) {
    $str = str_replace('-', ' ', $str);
    $str = ucwords($str);
    return str_replace(' ', '', $str);
}
$str1 = "open_door";
$str2 = "make_by_id";
echo changeStr($str1);
echo changeStr($str2);
?>
  1. 请写一个函数将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。
<?php
function changeNum($str) {
    $str = strrev($str);
    $arr = str_split($str, 3);
    $str = implode(',', $arr);
    return strrev($str);
}
$str = "1234567890";
echo changeNum($str);
?>

number_format ( float $number [, int $decimals = 0 ] ) : string 以千位分隔符方式格式化一个数字
  1. 如何实现每天0点钟重新启动服务器。
crontab -e
0 0 * * * /sbin/init 6
或
0 0 * * * /sbin/reboot
  1. 当前目录下有一个文件为 showme.sh , 如何将其指定为使用 /bin/bash 运行,如何修改其权限为所有用户可读写可执行,如何修改其所有者为root?
- 在文件第一行加入:#!/bin/bash
- chmod 777 showme.sh
- chown root showme.sh #所有者
- chown :root showme.sh #所属组
- chown root:root showme.sh #所有者和所属组
  1. 什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?
- 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息
- 主键索引不允许为空值,唯一索引列允许空值
- 一个表最多只能创建一个主键,但可以创建多个唯一索引
- 建立索引需要增加存储空间,空间利用率低,当数据发生变化时索引消耗资源比较大
  1. 写出下面程序的运行结果。
<?php
$a = 0;
$b = 0;
if ($a = 3 || $b = 3) {
    $a++;
    $b++;
}
echo $a, ',', $b;     # 1,1
?>

<?php
$a = 0;
$b = 0;
if ($a = 4 | $b = 3) {
    $a++;
    $b++;
}
echo $a, ',', $b;    # 8,4
?>

解析:|| 和 | 的优化级比 = 的高
  1. 写出下面程序的运行结果。
<?php
function myfunc($argument) {
    echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable)=".myfunc($variable);
?>

20myfunc(10)=
  1. 写出一种验证email地址的正则表达式。
/^\w+[\w.]*@[\w.]+\.\w+$/
  1. 如何判断sql语句的运行效率,如何优化一个查询SQL?
- explain sql语句;
- 给查询条件加上索引
  1. 用PHP写出显示客户端IP与服务器IP的代码?
<?php
echo $_SERVER['REMOTE_ADDR'];  #客户端IP
echo $_SERVER['SERVER_ADDR'];  #服务器IP
?>
  1. 简述include和require的区别。
- include在引入不存文件时产生一个警告且脚本还会继续执行,require则会导致一个致命性错误且脚本停止执行
- include有返回值,而require没有
- include在用到时加载,require在一开始就加载
- 为了避免多次包含同一文件,可使用include_once和require_once来代替
  1. 在http1.0中,状态码为401的含义是?如果返回"找不到文件"的提示,则用header函数,其语句为?
- 401 未被授权没有访问权限
- header("HTTP/1.1 404 NOT Found");
  1. 在PHP中heredoc是一种特殊的字符串,它的结束标志必须?
- heredoc 句法结构:<<<,在该运算符之后要提供一个标识符,然后换行,结束标志必须是前面定义的标识符并且必须在第一列。
例如:
<?php
$str = <<<EOD
    Example of string
    spanning multiple lines
    using heredoc syntax.
EOD;
?>
  1. 在php中error_reporting这个函数的作用是?
用于设置当前脚本的错误报告级别,指定报告何种 PHP 错误。
  1. 简述如何得到当前执行脚本路径,包括所得到的参数?
echo $_SERVER['REQUEST_URI'];
  1. ftp://pub.foo.bar.com:2121/incoming/rls.sfv请给出这个url的各部分的含义。
- 协议:ftp://
- 域名:pub.foo.bar.com
- 端口:2121
- 目录:/incoming/
- 文件:rls.sfv
  1. 写出服务器常用的端口。
80    http协议
443   https协议
21    ftp协议
22    ssh协议
23    telnet协议
53    dns协议
  1. 写出几个常用的Linux操作命令。
- ls        列出目录内容
- cd        切换目录
- pwd       显示当前工作目录
- touch     创建文件
- mkdir     创建目录
- rm        删除文件或目录
  1. 请写出几个PHP中预定魔术常量。
- __LINE__        文件中的当前行号
- __FILE__        文件的完整路径和文件名
- __DIR__         文件所在的目录
- __FUNCTION__    函数名称
- __CLASS__       类名称
- __TRAIT__       Trait 的名字
- __METHOD__      类的方法名
- __NAMESPACE__   当前命名空间的名称
  1. 请写出下列代码的执行结果。
<?php
$var1 = 5;
$var2 = 10;
function foo(&$my_var) {
    global $var1;
    $var1 +=2;
    $var2 = 4;
    $my_var +=3;
    return $var2;
}
$my_var = 5;
echo foo($my_var);    //4
echo $my_var;    //8
echo $var1;    //7
echo $var2;    //10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var);    //4
?>
  1. 输出用户的ip地址,并判断用户的IP地址是否在192.168.1.100 --- 192.168.1.150之间。
<?php
$ip1 = ip2long("192.168.1.100");
$ip2 = ip2long("192.168.1.150");
$userIp = ip2long("192.168.1.108");
if ($userIp >= $ip1 && $userIp <= $ip2) {
    echo 'yes';
} else {
    echo  'no';
}
?>

ip2long ( string $ip_address ) : int 将 IPV4 的字符串互联网协议转换成长整型数字
  1. 将二维数组按照name的长度进行重新排序,按照顺序将id赋值(从1开始),二维数组如下:
$arr = array(
    array('id' => 0, 'name' => '123456789'),
    array('id' => 0, 'name' => 'aaa'),
    array('id' => 0, 'name' => 'abcdefghijkln'),
    array('id' => 0, 'name' => '12245'),
    array('id' => 0, 'name' => 'a1b2b4n6')
);
foreach ($arr as $val) {
    $arr2[] = strlen($val['name']);
}
array_multisort($arr2, $arr);
foreach ($arr as &$val) {
   $val['id'] = ++$i;
}
var_dump($arr);
  1. 实现不用第三个变量交换,$a,$b的值,$a,$b的初始值自己定:
<?php
//如果$a $b都是int型
$a = 10;
$b = 20;
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;
echo $a, $b;

//如果$a $b不是int型
$a = "php";
$b = "linux";
list($a, $b) = array($b, $a);
echo $a, $b;
?>
  1. 打印出前一天的时间,格式是 2020-02-28 21:15:31。
<?php
echo date('Y-m-d H:i:s', strtotime('-1 day'));
?>
strtotime('first day of next month');//下个月第一天的时间戳
strtotime('last day of last month'); //上个月最后一天的时间戳
  1. 下面程序输出的结果什么?
<?php
$a = 5;
function factorial($a) {
    for ($b = $a; $b > 0; $b--) {
        $a = $a * $b;
    }
}
factorial($a);
echo $a;  // 5
?>
  1. 写一个函数checkIp,使用正则表达式检测一个ipv4的IP是否正确,正确返回true,错误返回false。
<?php
function checkIp($ipStr) {
   $pattern = "/^((2([5][0-5]|[4]\d))|(1?\d{1,2}))(\.((2([5][0-5]|[4]\d))|(1?\d{1,2}))){3}$/";
   if (preg_match($pattern, $ipStr)) {
        return true;
    } else {
        return false;
    }
}
$ipStr = "172.17.0.4";
var_dump(checkIp($ipStr));
?>
  1. php代码如下:
<?php
$data = array('a', 'b', 'c');
foreach ($data as $key => $val) {
    $val = &$data[$key];
}
?>
  • 程序执行时,每一次循环结束后变量$data的值是什么?
- 第一次循环:array('a', 'b', 'c')
- 第二次循环:array('b', 'b', 'c')
- 第三次循环:array('b', 'c', 'c')
  • 程序执行完成后,变量$data的值是什么?
array('b', 'c', 'c')
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!