PHP基础面试题收集

###函数 

字符串函数

如何获取字符串的长度?

  • strlen()

字符串大小写的转换的函数有?

  • strtoupper(): 将字符串中的小写字符转变为大写的字符 strtolower(): 将字符串中大写的字符转变为小写的字符 ucfirst(): 首字符大写(只针对首字符,不对其他的字符进行操作) ucwords():单词首字母大写(只针对每一个单词首字符,不对其他的字符进行操作)

去除空格的函数有?

  • trim() 对表单进行处理的时候 百分之百要用到去空格函数 ltrim|rtrim 删除字符串开头|结尾的空白字符(或其他字符)

查找一个字符串在另一个字符串中第一次出现的位置?

  • strpos() strstr() 查找字符串的首次出现的位置(大小写敏感) stristr() 查找字符串的首次出现的位置(大小写不敏感)

如何替换字符串中的某个字符?

  • str_replace()

字符串的重复函数是?

  • str_repeat()

字符串的填补函数是?

  • str_pad()

如何完成字符串的反转?

  • strrev(); ps:汉字不能反转
//不准用PHP内置的就自己写	
strrev($str)
{
    $len=strlen($str);
    $newstr = '';
    for($i=$len;$i>=0;$i--)
    {
        $newstr .= $str{$i};
    }
    return $newstr;
}

数字格式化函数是?

  • number_format()

打断字符串为指定数量的字串的函数?

  • wordwrap()

字符串按要求的字符编码来转换的函数?

  • iconv()

字符串的截取函数是?

  • substr()

字符串的截取比较是?

  • substr_compare()
HTML函数

将html标签转换为html实体的函数?

  • htmlspecialchars()

将html实体转换为html标签的函数?

  • htmlspecialchars_decode()

从字符串中去除 HTML和 PHP 标记的函数?

  • strip_tags()

去除字符串中转义斜杠的函数?

  • stripslashes()

####其他函数 **Strtotime(str)**将字符串转换成时间戳

  • strtotime(“2008/6/8”)
  • strtotime(“+3 Days”);
  • strtotime(“now”); //yesterday tomorrow

date(“Y-m-d H:i:s”,time()) 格式化时间戳

检测一个变量是否有设置的函数是否?是否为空的函数是?

  • isset() empty()

PHP里面如何定义一个常量(constant)?

  • 通过define()指令,例如:define(“MYCONSTANT”, 100)

检测变量是否为布尔类型的函数是?

  • is_bool
  • is_float 检测变量是否是浮点型
  • is_int 检测变量是否是整数
  • is_string 检测变量是否是字符串
  • is_null 检测变量是否是空类型

用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21?

echo date('Y-m-d H:i:s',strtotime('-1 day'));
//ps:strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳

写出一个函数,尽可能的高效,从一个标准的URL里取出文件的扩展名例如:http://www.baidu.com/abc/de/fg.php/?id=1,需要取出 php 或者.php?

$url ="http://www.baidu.com/abc/de/fg.php/?id=1";
//获得文件目录名字,http://www.baidu.com/abc/de/fg.php
echo $path = pathinfo($url,PATHINFO_DIRNAME );
//获得文件的扩展名,php
$path = pathinfo($path,PATHINFO_EXTENSION);
echo $path;

下列哪个PHP函数是用正则表达式将字符串分割到数组中?

A split B implode C explode D join 

选择 A

注释: split:用正则表达式将字符串分割成数组. implode:将数组组合成一个字符串 explode:使用一个字符串分割字符串成数组 join:implode的别名

哪个PHP函数可以实现向上取整(又称进一取整)?

  • ceil()

###数组

$arr = array(‘james’, ‘tom’, ‘symfony’); 请打印出第一个元素的值

  • echo $array[0]

array_search()-在数组中搜索给定的值

in_array():判断某个数组元素值是否存在

**array_key_exists():**判断某个数组元素的标识符是否存在

**array_values():**从数组中取得所有的数组元素值,组成一个新的索引数组,如果正确,返回的是组成的索引数组,不正确则返回false

<?php
$arr =array('a'=>0,'b'=>1,'c'=>2);
$res =array_values($arr);
print_r($res);
?>

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
)

**array_keys():**从数组中取出所有的数组元素的标识符,组成一个新的索引数组

**extract($数组名):**将关联数组映射到一张变量表中,以键名当作变量名,以数组元素值当作变量值,如果对变量的值做了修改(重定义),那么他不会影响数组中的数组元素值

<?php
	$arr =array('a'=>'alice','b'=>'bob','c'=>'clare');
	$res =extract($arr);
	print_r($a);
	print_r($b);
	print_r($c);
?>
	'alice'
	'bob'
	'clare'

**list():**将数组中的元素值赋给不同的变量

  • 结构:list(变量1,变量2,变量3…)=array(…);

  • 注意:只能对索引数组进行操作

array_push(数组名,参数1,参数2,参数3…) 入栈:从堆栈结构的顶部压入数据的操作 array_pop(数组名) 出栈:从堆栈结构的顶部弹出(删除)数据的过程

array_unshift(数组名,参数1,参数2,参数3…) 入队:从队列的头部压入一些数据,这种操作叫做入队 array_shift(数组名) 出队:从队列的头部删除一些数据,这种操作叫做出队

array_search:

  • 他用来查找数组元素查找数据在数组中的位置,如果该数组有该数据,返回的是该数据在数组中的数组元素的下标或者键名;
<?php
	$arr = array('name'=>'lucy','age'=>23,'sex'=>'girl');
	echo array_search('lucy',$arr);
?>
	'name'

**array_merge($arr1,$arr2):**将参数列表中的数组进行合并 array_slice(数组名,切割的起始位置,切掉的长度)

  • 切割数组中的连续的几个数组元素,切割后返回的是切割掉的数组元素组成的新数组,,切割不成功返回空数组

array_splice(数组名,切割起始位置,切割的长度,替换的新数据)

  • 返回值是切割掉的数据

不常用数组:

  • sort()
  • rsort()
  • ksort()
  • krsort()
  • array_unique():去除重复的数组元素值,返回去除重复元素值之后的数组
  • array_count_values():返回的数组,统计数组中所有的值出现的次数
  • array_rand():从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个标识符
  • array_sum():将数组中的所有值的和以整数或浮点数的结果返回
  • array_product():计算乘积
  • array_diff(数组1,数组2):用来求数组的差集,用第一个数组减去第二个数组
  • array_diff_key()
  • arraydiffassoc()
  • array_intersect()
  • arrayintersectkey()

###OOP

类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是?

  • serialize() unserialize()

请写出PHP5权限控制修饰符

  • public(公共),private(私用),protected(继承) php class中static,public,private,protected的区别?

  • static 静态,类名可以访问

  • public 表示全局,类内部外部子类都可以访问;

  • private表示私有的,只有本类内部可以使用;

  • protected表示受保护的,只有本类或子类或父类中可以访问;

写几个魔术方法并说明作用? __call()当调用不存在的方法时会自动调用的方法 __autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件 __set()当给未定义的变量赋值时会自动调用的方法 __get()当获取未定义变量的值时会自动调用的方法 __construct()构造方法,实例化类时自动调用的方法 __destroy()销毁对象时自动调用的方法 __unset()当对一个未定义变量调用unset()时自动调用的方法 __isset()当对一个未定义变量调用isset()方法时自动调用的方法 __clone()克隆一个对象 __tostring()当输出一个对象时自动调用的方法

###数据库 MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?

  • Varchar是变长,节省存储空间,char是固定长度。查找效率要varchar型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些

MyISAM 和 InnoDB 的基本区别?索引结构如何实现?

  • MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢

MYSQL取得当前时间的函数是?,格式化日期的函数是?

  • now(),date()

对于大流量的网站,您采用什么样的方法来解决访问量问题?

  • 确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表, 程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量

防止SQL注入漏洞可以用哪些函数?

  • addslashes()
  • mysql_escape_string()

对于大流量的网站,您采用什么样的方法来解决访问量问题?

  • 优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法: 1、确定当前服务器设备是否满足流量需求。 2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。 3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。 4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。 5、使用不同的主机分流主要流量,使服务器均衡负载。 6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

数据库索引有几类,分别是什么?什么时候该用索引?

  • 普通索引、主键索引、唯一索引 并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。

你对Memcach的理解,优点有哪些?

  • Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。 Memcache的优点:稳定、配置简单、多机分布式存储、速度快。

###其他 如何在页面之间传递变量(至少两种方式)

  • GET,POST,COOKIE,SESSION,隐藏表单

请问GET 和POST的区别是什么?

  • GET方法传输数据,所有的信息都会出现在URL地址中,最多只能传输1024字节,而POST可以通过表单传输大量数据,最多可以传输2M数据,可以根据需求调节.

能够使HTML和PHP分离开使用的模板

  • Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

JS表单弹出对话框函数是?获得输入焦点函数是?

  • 弹出对话框: alert(),prompt(),confirm()

php读取文件内容的几种方法和函数?

  • 打开文件,然后读取。Fopen() fread()
  • 打开读取一次完成 file_get_contents()

请列出3个PHP中的预定义全局变量?

  1. $_SESSION
  2. $_COOKIE
  3. $_SERVER
  4. $_GET
  5. $_POST

用PHP写出显示客户端IP与服务器IP的代码

  • echo $_SERVER[‘REMOTE_ADDR’];
  • echo $_SERVER[‘SERVER_ADDR’];

HTTP 状态中302、403、 500代码含义?

  • 一二三四五原则:一 消息系列 二 成功系列 三 重定向系列 四错误系列 五 服务器端错误系列
  • 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。

javascript能否定义二维数组,如果不能你如何解决?

  • javascript不支持二维数组定义,可以用arr[0] = new array()来解决

以下代码的执行结果是?

<?php
	$test ='test1';
	$abc =&$test;
	unset($test);
	echo $abc?$abc:'test2';

A.test1   B.test2   C.执行报错   D输出为空

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值