今天这篇文章就带大家介绍几道PHP基础面试题!
1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
strlen和mb_strlen都是用于获取字符串长度。
strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;
可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。
总结:
示例:
<?php
/*
strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部)
*/
header('Content-Type:text/html;charset=utf-8');
// (1)英文字符串
$str1 ="duang~";
echo strlen($str1);//总字节数为6,内部字符编码,单字节编码
echo "<br />";
echo mb_strlen($str1);//总字节数为6,内部字符编码
echo "<br />";
echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码
echo "<hr />";
// (2)中文字符串
$str2 = "你是我的小苹果";
echo strlen($str2);//总字节数为21,内部字符编码,单字节编码
echo "<br />";
echo mb_strlen($str2);//总字节数为21,内部字符编码
echo "<br />";
echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码
?>
相关题目 1:实现中文字串截取无乱码的方法。
方法一,使用 php 内置函数 mb_substr()
方法二,自定义函数,以 utf-8 为例,如下:
<?php
/*
相关题目 1:实现中文字串截取无乱码的方法。
*/
header('Content-Type:text/html;charset=utf-8');
//=================方法一=======================
$str = "你是我的温暖阳光";
echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖
// ================方法二=======================
/**
* utf8编码字符串截取无乱码
* @param $str string 要处理的字符串
* @param $start int 从哪个位置开始截取
* @param $length int 要截取字符的个数
* @return string 截取后得到的字符串
*/
function substr_utf8($str,$start,$length = null)
{
$sep = "";
$arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
return join($sep,$arr);
}
// 示例
$str = "你是我的温暖阳光";
echo substr_utf8($str,2,4);//输出 我的温暖
?>
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
<?php
/*
相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
*/
header('Content-Type:text/html;charset=utf-8');
//=================方法一=======================
$str = "中国2北333京";
echo mb_strlen($str,'utf-8');//输出字符数 8
echo mb_substr($str, 3,1,'utf-8');//输出 北
// ================方法二=======================
/**
* utf8编码字符串截取无乱码
* @param $str string 要处理的字符串
* @param $start int 从哪个位置开始截取
* @param $length int 要截取字符的个数
* @return string 截取后得到的字符串
*/
function substr_utf8($str,$start,$length = null)
{
$sep = "";
$arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length);
return join($sep,$arr);
}
/**
* utf8编码字符串计算长度
* @param $str string 要处理的字符串
* @return int 字符串的长度或字符个数
*/
function strlen_utf8($str)
{
return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY));
}
// 示例
$str = "中国2北333京";
echo strlen_utf8($str);//输出字符数 8
echo substr_utf8($str,3,1);//输出 北
?>
2. 下列哪个函数是用正则表达式将字符串分割到数组中 ( )
A. split
B. implode
C. explode
D. join
答案:A
3. 写出下列程序的输出结果(新浪网技术部)
<?php
/*
写出下列程序的输出结果(新浪网技术部)
*/
$x = 87;
$y = ($x % 7) * 16;
$z = $x > $y ? 1 : 0;
echo $z;
?>
答案:1
4. 写出下列几个预定义全局变量的作用 (新浪网技术部)
$_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录
$_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息
S_FILES['userfile']['name']//客户端机器文件的原名称
$_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size']//已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error']//和该文件上传相关的错误代码
5. include 和 require 都能把另外一个文件包含到当前文件中,他们有什么区别?Include 和include_once 又有什么区别?(新浪网技术部)
二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
相关题目 1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目 2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是_;为了避免多次包含同一文件,可以用语句_来代替它们。
在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;require_once()/include_once()
相关题目 3:What functions can you use to add library code to the currently running script?(Yahoo)include、require
6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
<?php
/*
6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)
*/
// 定义函数
function maxnum($a,$b,$c)
{
return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
}
// 调用实例
echo maxnum(24,15,8);
?>
7. 简述 POST 和 GET 传输的最大容量分别是多少? (51.com 笔试题)
POST 根据你 php.ini 文件配置(默认是 8M)
GET 的话大小限制在 2KB
相关题目:表单中 get 与 post 提交方法的区别?
get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。
8. 有三个 php 文件位于同一目录下,内容如下所示。使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果 ,如果不存在问题,请写出浏览器查看效果(酷讯 PHP 工程师笔试题)
A.php:
<?php
function fa(){
echo "in Function A\n";
}
?>
B.php:
<?php
include 'a.php';
function fb() {
fa();
echo "in Function B\n";
}
?>
C.php:
<?php
include 'a.php';
include 'b.php';
fa();
fb();
?>
答案:存在问题,a.php 被包含了两次,导致 fa()函数重复定义,使用 include_once 避免重复包含。
9. echo(),print(),print_r()的区别?(新浪)
echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)
在实际使用中, print 和 echo 两者的功能几乎是完全一样。
可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:
在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。
echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:
(1) echo可以输出多个字符串,像下面这样:
echo 'a','b','c';
如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成:
echo ('a'),('b'),('c');
它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print 'Hello World';
(有返回值所以能够用在更复杂的表达式中,可以判断是否输出成功等表达式)所以它能用在更复杂的表达式中。
另外,echo的效率相对比较快~
如下代码:
<?php
$a='hello ';
$b='php world!';
echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示
print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔
print $a,$b.'<br />';//使用逗号时报错。
?>
说明:
总结:
echo命令和print命令相同,没有区别
echo()和print()有区别:
echo()没有返回值,与echo命令相同
print()有返回值,总是返回1
补充:
printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
10. 用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
<?php
/*
用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
*/
// ================方法一==================
echo date("Y-m-d H:i:s",time() - 3600*24);
echo "<br />";
// ================方法二==================
echo date("Y-m-d H:i:s",strtotime("-1 day"));
echo "<br />";
// 将表单中提交的时间字符串"2015-6-23"转成时间戳
$date = strtotime("2015-6-23");
echo $date;
?>
说明:
使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。
相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
11. 不使用第三个变量交换两个变量的值
<?php
/*
不使用第三个变量交换两个变量的值
*/
// ================方法一==================
$a = "PHP";
$b = "MySQL";
echo '$a='.$a.'<br />';
echo '$b='.$b.'<br />';
list($a,$b) = array($b,$a);
echo '$a='.$a.'<br />';
echo '$b='.$b.'<br />';
echo "<hr />";
// ================方法二==================
$a = "PHP";
$b = "MySQL";
echo '$a='.$a.'<br />';
echo '$b='.$b.'<br />';
$a = $a.'&'.$b;//使用&连接两个字符串
// 根据&进行字符串分割
$b = explode('&', $a);
$a = $b[1];
$b = $b[0];
echo '$a='.$a.'<br />';
echo '$b='.$b.'<br />';
?>
请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。
那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。
这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
对于较大的数据,传引用比较好,这样可以节省内存的开销。
相关题目 1:What would the following code print to the browser? Why?
<?php
$num = 10;
function multipy($num){
$num = $num +10;
}
multipy($num);
echo $num;
?>
输出 10
相关题目 2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个 regular variable 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
12. 将 1234567890 转换成 1,234,567,890 每 3 ���用逗号隔开的形式。(百度)
<?php
$str ='1234567890';
function str($str)
{
// 反转字符串,得到0987654321
$str = strrev($str);
// 使用逗号分割字符串,得到098,765,432,1,
$str = chunk_split($str,3,',');
// 再次反转字符串,得到,1,234,567,890
$str = strrev($str);
// 去掉左边的",",得到1,234,567,890
$str = ltrim($str,',');
return $str;
}
echo str($str);
?>
相关题目 1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
<?php
header("Content-Type:text/html;charset=utf-8");
/**
* 反转utf8编码的中文字符串
* @param string $str
* @return string
*/
function strrev_utf8($str)
{
return join("",array_reverse(preg_split("//u", $str)));
}
// 实例
$str = "悄悄是别离的笙箫";
echo strrev_utf8($str);
?>
相关题目 2:假设现在有一个字符串 www.baidu.com 如何使用 PHP 对它进行操作使字符串以 moc.udiab.输出? (亿邮)
<?php
$str = "www.baidu.com";
echo strrev(str_replace('www','',$str));
?>
13. 用 PHP 写出显示客户端 IP 与服务器 IP 的代码。
客户端 IP:$_SERVER["REMOTE_ADDR"]
服务器端 IP:$_SERVER["SERVER_ADDR"]
14. 简述如何得到当前执行脚本路径,包括所得到参数。
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__
获取参数,使用$_SERVER["QUERY_STRING"]
15. What is the difference between foo() & @foo()?(Yahoo)
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!