如果你是php作为面试官如何提问你会提哪些面试的问题!

PHP中提问频率最高的11个面试题和答案
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了PHP中提问频率最高的11个面试题和答案,每个公司都有自己的面试标准,面试和问题是完全取决于你在工作中所扮演的角色,当然也和你的编程技能息息相关,需要的朋友可以参考下
你是否正在准备寻找一份PHP开发的工作,并且也在寻找一些关于PHP的面试题及答案?本文为大家分享了一些被提问频率最高的11个PHP面试题,以及对应的常规回答,每个公司都有自己的面试标准,面试和问题是完全取决于你在工作中所扮演的角色,当然也和你的编程技能息息相关。
问题:请用最简单的语言告诉我PHP是什么?
回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。
问题:什么是MVC?
回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
问题:在页面中引用CSS有几种方式?
回答:在页面中使用CSS有3中方式:
引用外部CSS文件
内部定义Style样式
问题:PHP支持多继承吗?
回答:不可以。PHP类只能继承一个父类,并用关键字“extended”标识。
问题:请问PHP中echo和print有什么区别?
这两个看起来很相似,因为它们都是将一些值打印在屏幕上。但是echo和print的本质区别在于:echo用来输出字符串,显示多个值的时候可以用逗号隔开。只支持基本类型,print不仅可以打印字符串值,而且可以打印函数的返回值。
问题:请问GET和POST方法有什么区别?
回答:我们再网页上填写的表单信息都可以通过这两个方法将数据传递到服务器上,当我们使用GET方法是,所有的信息都会出现在URL地址中,并且使用GET方法最多只能传递1024个字符,所以如果在传输量小或者安全性不那么重要的情况下可以使用GET方法。说到POST方法,最多可以传输2MB字节的数据,而且可以根据需要调节。
问题:PHP中获取图像尺寸大小的方法是什么?
回答:getimagesize () 获取图片的尺寸
Imagesx () 获取图片的宽度
Imagesy () 获取图片的高度
问题:PHP中的PEAR是什么?
回答:PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。
问题:如何用PHP和MySQL上传视频?
回答:我们可以在数据库中存放视频的地址,而不需要将真正的视频数据存在数据库中。可以将视频数据存放在服务器的指定文件夹下,上传的默认大小是2MB,但是我们也可以在php.ini文件中修改max_file size选项来改变。
问题:PHP中的错误类型有哪些?
回答:PHP中遇到的错误类型大致有3类。
提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。
警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。
错误:这是真正的严重错误,比如访问不存在的PHP类。
问题:如何在PHP中定义常量?
回答:PHP中使用Define () 来定义常量。
define (“Newconstant”, 30);
问题:如何不使用submit按钮来提交表单?
如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:
&a href=”javascript: document.myform.submit();”&Submit Me&/a&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具php面试中的经典问题 - CSDN博客
php面试中的经典问题
本文讲述14个经典的php面试题.
考虑下面代码:
$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2)) {
echo "\"" . $str1 . "\" contains \"" . $str2 . "\"";
echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\"";
输出的结果是什么??为什么会出现这个结果?? 如何处理这种情况??
输出结果为:
"yabadabadoo" does not contain "yaba"
这个问题考察的是”strpos()”的使用.
这个函数返回变量$str2在$str1中的位置.
如果未找到就返回false.
但是, 本次调用时, 这个函数返回的值为0,
对于if语句来说, 0等同于false.
对于这种情况, 需要在if语句中判断函数返回值是否为false, 修改的代码如下:
$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2) !== false) {
echo "\"" . $str1 . "\" contains \"" . $str2 . "\"";
echo "\"" . $str1 . "\" does not contain \"" . $str2 . "\"";
注意, 在这里我们”!==”操作符, 而不是”!=”操作符.
如果我们使用”!=”, 我们就遇到这样一个问题, 0为强制转化为布尔表达式时, 0对应的是false.
所以”0 != false”的结果为”false”.
下面的代码的输出结果是什么??
echo "&br /&";
echo $x+++$x++;
echo "&br /&";
echo "&br /&";
echo $x---$x--;
echo "&br /&";
输出结果是:
本题考察”后++”和”后–”的使用与”++”操作符和”+”操作符的优先级.
“后++”和”后–”先返回数值, 然后执行加一或者减一操作.
当同时出现”++”和”+”操作符时, 因为”++”操作符比”+”操作符高, 所以先执行”++”操作, 后执行”+”操作.
执行完下面的代码后, 变量”$a”和变量”$b”的值时多少??
$b = "2$b";
变量”$a”和变量”$b”的值都将等于字符串”21”.
在执行代码”$b = &$a;”时, 变量”$b”就赋值为变量”$a”的引用, 变量”$b”修改时, 变量”$a”的值也将修改.
当变量赋值是出现双引号时, php将执行双引号中的表达式, 即”2$b”的结果实际为字符串”2”和变量”$b”的连接, 也就是字符串”21”.
下面各行的输出结果是什么???
var_dump(0123 == 123);
var_dump('0123' == 123);
var_dump('0123' === 123);
运行的结果如下:
bool(false)
bool(true)
bool(false)
对于语句”var_dump(0123 == 123)”, 输出结果为”bool(false)”.
因为以0开头的数组在php解释器看来, 是八进制数字.
八进制的”123”与十进制的”123”不相等.
对于语句”var_dump(‘0123’ == 123)”, 其输出结果为”bool(true)”.
因为字符串”0123”与数值”123”比较时, 字符串”0123”将自动转化为数值型, 字符串中的”0”将被忽略.
所以这个字符串将被转化为数值类型的”123”. 这个数值与数值”123”相等, 最后返回的结果为true.
对于语句”var_dump(‘0123’ === 123)”, 其输出结果为”bool(false)”.
在这个语句中引入了严格比较符”===”, 这个比较符会先比较两个变量的数据类型.
对于当前语句而言, 前者为字符串, 后者为数值型, 两个变量的类型不同, 所以返回false.
下面的代码的结果是什么???有什么问题???如何修改??
$referenceTable = array();
$referenceTable['val1'] = array(1, 2);
$referenceTable['val2'] = 3;
$referenceTable['val3'] = array(4, 5);
$testArray = array();
$testArray = array_merge($testArray, $referenceTable['val1']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val2']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val3']);
var_dump($testArray);
输出结果如下所是:
array(2) { [0]=& int(1) [1]=& int(2) }
同时将会出现两个警告:
Warning: array_merge(): Argument #2 is not an array
Warning: array_merge(): Argument #1 is not an array
本题的关键是, 如果”array_merge()”函数的两个参数中有一个不是数组类型, 这个函数的返回值将返回”NULL”.
在一般逻辑下, 形如语句”array_merge($someValidArray, NULL)”的结果为”$someValidArray”,
然而, 这个函数实际的返回结果是”NULL”, 而且, 这一点在php的官方文档中也很少提到.
As a result, the call to testArray=arraymerge(testArray, referenceTable[‘val2′])evaluatestotestArray = array_merge(testArray,3)and,since3isnotoftypearray,thiscalltoarraymerge()returnsNULL,whichinturnendsupsettingtestArray equal to NULL.
Then, when we get to the next call to array_merge(), $testArray is now NULL
so array_merge() again returns NULL.
(This also explains why the first warning complains about argument #2
and the second warning complains about argument #1.)
执行语句”$testArray = array_merge($testArray, $referenceTable[‘val2’])”时,
这个语句将转化为”$testArray = array_merge($testArray, 3)”.
由于上面提到的原因, 变量”$testArray”的值被赋值为”NULL”.
执行语句”$testArray = array_merge($testArray, $referenceTable[‘val3’]);”时,
这个语句等同于”$testArray = array_merge(NULL, $referenceTable[‘val3’]);”.
这个语句中, 第一个参数的值为NULL, 不是数组类型, 函数调用的结果为”NULL”.
所以, 最后变量”$testArray”的值为”NULL”.
这也说明了, 为什么两个警告中, 一个时参数2, 一个是参数1了.
面对这种情况, 修改的措施也是简单的.
直接对参数进行类型转化, 我们就可以实现原有的要求:
$testArray = array_merge($testArray, (array)$referenceTable['val1']);
var_dump($testArray);
$testArray = array_merge($testArray, (array)$referenceTable['val2']);
var_dump($testArray);
$testArray = array_merge($testArray, (array)$referenceTable['val3']);
var_dump($testArray);
这样的输出结果如下:
array(2) { [0]=& int(1) [1]=& int(2) }
array(3) { [0]=& int(1) [1]=& int(2) [2]=& int(3) }
array(5) { [0]=& int(1) [1]=& int(2) [2]=& int(3) [3]=& int(4) [4]=& int(5) }
下面代码输出的结果是什么??为什么??
var_dump($x);
出乎意料的, 上面的代码将输出”bool(true)”, 看似”and”操作符表现的跟”or”操作符相同 .
The issue here is that the = operator takes precedence over the and operator in order of operations, so the statement $x = true and false ends up being functionally equivalent to:
事实上, “=”操作符的优先级比”and”操作符高.
因此, 语句”$x = true and false”可以等同下面语句:
// 将"$x"变量赋值为true, 由于赋值成功, 返回true.
// 结果是false, 但是这个结果与$x无关.
为了使自己的表达式更加清晰, 适当添加括号是一个很好的习惯.
例如, 形如上面的表达式”$x = true and false”用”$x = (true and false)”代替,
那么”$x”就被设置为”false”了.
下面运行下面的语句, 变量”$x”的值为:
$x = 3 + "15%" + "$25"
变量”$x”的值为18.
Here’s why:
PHP supports automatic type conversion based on the context in which a variable or value is being used.
php支持根据语境自动变量类型转化.
如果你在一个表达式中使用算术运算, 并且这个表达式中包含字符串.
那么这些字符串将被转化为相应的数字, 以完成算术运算.
如果一个字符串由数字开头, 那么这个字符串将忽略非数字部分, 将数字部分的字符转化为相应的数值.
如果一个字符串以非数字开头, 那么这个字符串将被转化为0.
基于上面的原因, 字符串”15%”将被转化为”15”, 字符串”$25”将被转化为”0”.
那么原来的计算表达式”\$x = 3 + “15%” + “\$25”“将转化为”\$x=3+15+0”, 最后的结果为”18”.
执行下面代码后, 变量”$text”的值是什么, 语句”strlen($text)”的返回值是什么??
$text = 'John ';
$text[10] = 'Doe';
执行完上面的代码, 变量”$text”的值为”John
D”, 即字符串”john”后面跟着五个空格, 然后加一个字符”D”.
并且代码”strlen($text)”的返回值为11.
这里有两点需要注意:
首先, 变量”$text”是一个字符串, 设置这个变量中的一个元素的值, 就是设置这个变量中的一个字符.
代码”$text[10] = ‘Doe’”, 用于替换的字符为原字符中的第一个, 即”Doe”中的’D’.
第二, 代码”$text[10] = ‘Doe’”运行时, 将修改变量’$text’的第11个字符, 将其设置为’D’.
更重要的是, 原始字符串的长度为5, 对于其他编译器或者解释器而言, 这种操作会出现数组越界情况.
但是对于php而言, 这个操作是允许的.
php会自动适应这种情况, 并将其他字符位置置空.
“PHP_INT_MAX”是php的一个常量, 用于标识所支持的最大整数(这个值与php的版本和操作系统的架构有关).
假设代码”var_dump(PHP_INT_MAX)”的输出值为”4775807”.
依据上面这种情况, 下面的代码的运行结果是什么??
var_dump(PHP_INT_MAX + 1)
var_dump((int)(PHP_INT_MAX + 1))
代码”var_dump(PHP_INT_MAX + 1)”的结果将被转化为double类型, 在上面的情况中, 输出的结果为”double(9.8E+18)”.
这个问题的关键是考察面试者对于php对于大整数的处理, 即将整型无法处理的数据转化为double类型.
代码”var_dump((int)(PHP_INT_MAX + 1))”将输出结果为一个负数, 在上面那种情况下, 输出的结果为”int(-4775808))”.
如何对一个字符串数组根据值在忽略大小写的情况下进行排序, 并不打乱键与值的关系.
例如给出下面的数组:
'0' =& 'z1',
'1' =& 'Z10',
'2' =& 'z12',
'3' =& 'Z2',
'4' =& 'z3',
排序完的结果为:
'0' =& 'z1',
'3' =& 'Z2',
'4' =& 'z3',
'1' =& 'Z10',
'2' =& 'z12',
The trick to solving this problem is to use three special flags with the standard asort() library function:
解决这个问题的关键是, 在”asort()”库函数中设置特殊的标识:
asort($arr, SORT_STRING|SORT_FLAG_CASE|SORT_NATURAL)
函数”asort()”函数是标准函数”sort()”的一个变形, 这个函数会保持原有数据的键值关系.
三个标识”SORT_STRING”, “SORT_FLAG_CASE”和”SORT_NATURAL”设置了排序的要求,
将元素视为字符串, 忽略大小写, 保持原有的键值关系.
注意, 使用函数”natcasesort()”并不能得到预期的效果, 因为它会打乱原有的键值关系.
在php中, PEAR是什么???
PEAR(PHP Extension and Application Repository)是一个可复用的php组件库.
这个资源库中包含了各种各样的php代码摘要和库.
PEAR同时提供了一个自动下载包的命令行工具.
What are the differences between echo and print in PHP?
在php中”echo”和”print”的区别是什么???
echo and print are largely the same in PHP. Both are used to output data to the screen.
在php中, “echo”和”print”有着及其相似的功能.
他们都能将数据展现在屏幕上.
他们的不同如下所是:
The only differences are as follows:
“echo”使用时, 没有返回值, 而”print”会返回1. 这也使得”print”可以在表达式中使用.
“echo”可以接受多个参数, 但是, 这种方式使用很少. “print”只接收一个参数
“echo”是一个关键字, 而”print”是一个特殊的函数.
下面的代码段的结果是什么:
if( $l & $m & $v){
echo "yes";
echo "no";
一般人会认为3&2&1, 那么最后输出的结果为”yes”.
事实上, 最后输出的结果为”no”.
首先, 式子”$l & $m”将被执行, 并返回一个布尔值1, 即true.
接着比较这个布尔值和一个整型1, 即式子等同于”bool(1) & $v”, 结果为NULL, 所以最后的结果是”no”.
当执行完下面的代码后, 变量”$x”的值是什么?
$x = NULL;
if ('0xFF' == 255) {
$x = (int)'0xFF';
最后的答案既不是NULL, 也不是255.
最后的结果是”$x”为0.
首先, 我们需要判断表达式“‘0xFF’ == 255”的结果是true还是’false’.
当一个十六进制的字符串与一个整型数据比较时, 这个字符串将转为一个整型.
在内部, php会使用”is_numeric_string”判断这个字符串, 并将它转化为一个整型(因为另一个时参数时整型).
在这种情况下, 字符串”0xFF”将转化为255.
这时, 255与255比较, 结果为true.
这种情况只支持十六进制的字符串, 不支持八进制和二进制的字符串.
变量’$x’的值并不是’0xFF’的整型值.
在显式的将字符串转化为整型时, 底层将使用”convert_to_long”函数, 而不是”is_numeric_string”函数.
函数”convert_to_long”对字符串进行转化时, 从左往右依次转化, 直到遇到第一个非数值字符.
对于’0xFF’字符, 第一个非数字字符是’x’.
那么整个转化过程的结果为’0’.
所以”(int)’0xFF’”的结果是0, 即’$x’的值为0.
本文已收录于以下专栏:
相关文章推荐
相信很多人都听说过 Zend Engine 这个名词,也有很多人知道 Zend Engine 就是 PHP 语言的核心,但若要问一句:Zend Engine 到底存在于何处?或者说,Zend Engi...
PHP开始执行以后会经过两个主要的阶段:
处理请求之前的开始阶段
请求之后的结束阶段
开始阶段有两个过程:第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后...
CLI/CGI模式的PHP属于单进程的SAPI模式。这类的请求在处理一次请求后就关闭。也就是只会经过如下几个环节: 开始 - 请求开始 - 请求关闭 - 结束 SAPI接口实现就完成了其生命周期。
在PHP的生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。 这些内置实现的物理位置在PHP源码的SAPI目录。这个目录存放了PHP对各个服务器抽象层的代码, 例如命令行程序的实现,A...
多进程的SAPI生命周期通常PHP是编译为apache的一个模块来处理PHP请求。Apache一般会采用多进程模式, Apache启动后会fork出多个子进程,每个进程的内存空间独立,每个子进程都会经...
SAPI:Server Application Programming Interface 服务器端应用编程端口。研究过PHP架构的同学应该知道这个东东的重要性,它提供了一个接口,使得PHP可以和其他...
我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的。PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口)。PHP总共有三个模块:内...
、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里插入单引号,其中单引号里如果有变量的话,变量解释
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量...
1.以下哪一句不会把 John 新增到 users 阵列?
 $users[] = ‘john’;
 成功把 John 新增到阵列 users。
 array_add($us...
转载:/code/2687.html
PHP经典面试题目汇总(上篇)
1、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里插入单...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)本文章将持续更新,希望能在评论区发表自己的见解和认为比较经典的题目,后续笔者会在适当的节点对本文章进行分类和层次划分。文章中的不足之处望多指点,纠正!
1、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里插入单引号,其中单引号里如果有变量的话,变量解释
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\
能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
2、常用的超全局变量(8个)
-----&get传送方式
-----&post传送方式
-----&可以接收到get和post两种方式的值
-----&所有的变量都放在里面
-----&上传文件使用
-----&系统环境变量
-----&会话控制的时候会用到
-----&会话控制的时候会用到
3、HTTP中POST、GET、PUT、DELETE方式的区别
HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE,与其比不可少的URL的全称是资源描述符,我们可以这样理解:url描述了一个网络上资源,而post、get、put、delegate就是对这个资源进行增、删、改、查的操作!
3.1表单中get和post提交方式的区别
get是把参数数据队列加到提交表单的action属性所指的url中,值和表单内各个字段一一对应,从url中可以看到;post是通过HTTPPOST机制,将表单内各个字段与其内容防止在HTML的head中一起传送到action属性所指的url地址,用户看不到这个过程
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据
get传送的数据量较小,post传送的数据量较大,一般被默认不受限制,但在理论上,IIS4中最大量为80kb,IIS5中为1000k,get安全性非常低,post安全性较高
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。
4、PHP介绍
Hypertext Preprocessor----超文本预处理器
Personal Home Page
目标用途: 允许web开发人员快速编写动态生成的web页面,与其他页面相比,PHP是将程序嵌入到HTML文档中去执行,效率比完全生成HTML编辑的CGI高很多
HTML: Hypertext Markup Language
创始人: 拉姆斯勒·勒多夫Rasmus Lerdorf,1968年生,加拿大滑铁卢大学
勒多夫最开始是为了维护个人网页,用prel语言写了维护程序,之后又用c进行了重写,最终衍生出php/fi
将PHP/FI公开释出
1995 php2.0,加入了对MySQL的支持
1997 php3.0
2000 php4.0
2008 php5.0
由于php6.0没有完全解决Unicode编码,所以基本没有生产线上的应用,基本只是一款概念产品,很多功能已经在php5.3.3和php5.3.4上实现
常见的IDE(Intergrated Development Environment): 集成开发环境
常见文本编辑器,具备代码高亮:
php独特混合了C,Java,Prel以及PHP自创的语法
可以比CGI或者Prel更快速去执行动态网页,与其他变成语言相比,PHP是讲程序嵌入到HTML文档中去执行,执行效率比完全生成HTML编辑的CGI要高很多,所有的CGI都能实现
支持几乎所有流行的数据库以及操作系统
PHP可以使用C,C++进行程序的扩展
开放源代码
PHP技术应用:
静态页面生成
数据库缓存
div+css w3c标准
Smarty模块引擎
PHP认证级别
初级 IFE:Index Front Engineer 前端工程师
中级 IPE:Index PHP Engineer
高级 IAE:Index Architecture Engineer 架构工程师
6、echo、print_r、print、var_dump之间的区别
* echo、print是php语句,var_dump和print_r是函数
* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用
* print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false
* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试
* var_dump() 判断一个变量的类型和长度,并输出变量的数值
7、HTTP状态码
常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转义到其他URL
404 - 请求的资源(网页等)不存在
505 - 内部服务器错误
HTTP状态码分类:
1** - 信息,服务器收到的请求,需要请求者继续执行操作
- 成功,操作被成功接收并处理
3** - 重定向,需要进一步的操作以完成请求
4** - 客户端错误,请求包含语法错误或者无法完成请求
5** 服务器错误,服务器在处理请求的过程
中发生了错误
8、什么是魔术引号
魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义
9、如何获取客户端的ip(要求取得一个int)和服务器ip的代码
客户端:$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')
ip2long进行转换
服务器端:gethostbyname('')
10、使用那些工具进行版本控制
cvs、svn、vss、git
11、优化数据库的方法
选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如'省份'、'性别'最好适用ENUM
使用连接(JOIN)来代替子查询
适用联合(UNION)来代替手动创建的临时表
锁定表、优化事务处理
适用外键,优化锁定表
优化查询语句
12、是否使用过模板引擎?使用的模板引擎的名字是?
Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。
13、对于大流量网站,采用什么方法来解决访问量的问题
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量
14、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含
15、谈谈mvc的认识
由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图
16、 说明php中传值与传引用的区别,并说明传值什么时候传引用?
变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量
php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的__引用__(换言之,成为了其别名或者指向)了原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销
转载请注明出处
阅读(...) 评论()}

我要回帖

更多关于 php面试官问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信