PHP 面试题 PHP部分
Posted north-south
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 面试题 PHP部分相关的知识,希望对你有一定的参考价值。
1、双引号和单引号的区别?
-
双引号解释变量,单引号不解释变量;
-
双引号里插入单引号,其中单引号里如果有变量的话,变量解释;
-
双引号解释转义字符,单引号不解释转义字符,但是解释‘\和\\;
-
单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断);
-
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误。
2、HTTP中POST、GET、PUT、DELETE方式的区别?
(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安全性较高
(2)post、get、put、delete方式的区别
-
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
-
PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
-
POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
-
DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。
(3)get和post的区别
-
get提交的参数在url中可见,相对于post安全性低;
-
get传输的数量小(受浏览器限制,不用浏览器最大长度不同),post传值大小可以在php.ini中进行设置;
-
get一般用于从服务器获取数据,post一般用于向服务器提交数据;
-
get的执行效率比post高。
3、echo、print_r()、print、var_dump()之间的区别
(1)echo与print区别
-
echo、print为结构语言,echo()、print()为函数;
-
echo 输出一个以上的字符串(中间以逗号隔开),print 只能输出一个字符串;
-
echo 没有返回值,print有返回值;
-
echo 效率比print高。
(2)echo、print、print_r()、var_dump()区别
- echo 语言结构,输出一个或多个字符串,中间以逗号隔开,没有返回值,不能作为表达式的一部分使用;
- print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false;
- print_r() 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试;
- var_dump() 判断一个变量的类型和长度,并输出变量的数值。
语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们
-
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
-
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
-
包含文件不存在或者语法错误的时候,require是致命的,而include不是
- require_once、include_once表示了只包含一次,避免了重复包含
4、谈谈mvc的认识
由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视
优点:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式
5、HTTP状态码
常见的HTTP状态码:
- 200 - 请求成功
- 203 - 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
- 204 - 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
- 205 - 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
- 206 - 部分内容。服务器成功处理了部分GET请求
- 301 - 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
- 302 - 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 305 - 使用代理。所请求的资源必须通过代理访问
- 401 - 请求要求用户的身份认证
- 403 - 服务器理解请求客户端的请求,但是拒绝执行此请求
- 404 - 请求的资源(网页等)不存在
- 503 - 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
- 505 - 服务器不支持请求的HTTP协议的版本,无法完成处理
HTTP状态码分类:
- 1** - 信息,服务器收到的请求,需要请求者继续执行操作
- 2** - 成功,操作被成功接收并处理
- 3** - 重定向,需要进一步的操作以完成请求
- 4** - 客户端错误,请求包含语法错误或者无法完成请求
- 5** - 服务器错误,服务器在处理请求的过程 中发生了错误
6、常用的超全局变量(8个)
- $_GET ----->get传送方式
- $_POST ----->post传送方式
- $_REQUEST ----->可以接收到get和post两种方式的值
- $_FILE ----->上传文件使用
- $GLOBALS ----->所有的变量都放在里面
- $_SERVER ----->系统环境变量
- $_SESSION ----->会话控制的时候会用到
- $_COOKIE ----->会话控制的时候会用到
————————————————————————————————————————————————————————————————————————————————
- $_ENV ------->PHP解析所在服务器环境的有关信息
7、php5的魔术变量与魔术方法?
(1)魔术方法
1、__construct() :实例化对象时自动调用。
2、__destruct() :销毁对象或脚本执行结束时自动调用。
3、__call() :调用对象不存在得方法时执行此函数。
4、__get() :获取对象不存在的属性时执行此函数。
5、__set() :设置对象不存在的属性时执行此函数。
6、__isset() : 检测对象的某个属性是否存在时执行此函数。
7、__unset() :销毁对象的某个属性时执行此函数。
8、__toString() :将对象当作字符串输出时执行此函数。
9、__clone() :克隆对象时执行此函数。
10、__autoload() :实例化对象时,当类不存在时,执行此函数自动加载类。
11、__sleep() :serialize之前被调用,可以指定要序列化的对象属性。
12、__wakeup :unserialize之前被调用,可以执行对象的初始化工作。
13、__set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
14、__invoke() :将对象当作函数来使用时执行此方法,通常不推荐这样做。
(2)魔术常量
1、__line__ :文件中的当前行号。
2、__file__ :文件的完整路径和文件名。
3、__dir__ :文件所在的目录。
4、 __function__ :函数名称(php 4.3.0新加)。自php5起本常量返回该函数被定义时的名字(区分大小写)。
5、__class__ :类的名字(php 4.3.0新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
6、__namespace__ :当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
7、__trait__ :Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
8、__method__ :类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
8、如何获取客户端的ip(要求取得一个int)和服务器ip的代码
客户端:$_SERVER["REMOTE_ADDR"];或者getenv(‘REMOTE_ADDR‘)
ip2long进行转换
服务器端:$_SERVER["SERVER_ADDR"];
或者gethostbyname(‘www.baidu.com‘)
9、<?php echo count(strlen(“http://php.net”));?>的执行结果
输出 1
讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。
10、使用list()函数需要注意什么?
list()是一个语法结构。List($array)是用来快速把数组中的元素赋给一些变量。使用时要注意,$array必须为一个索引数组,并且索引值从0开始。
用法:
$arr = array(‘23‘,‘1‘,‘30‘,‘12‘,‘5‘);
list($a,,$b) = $arr;
echo ‘$a:‘.$a.‘;$b:‘.$b;
输出结果:$a:23;$b:30
11、说明php中传值与传引用的区别,并说明什么时候传引用?
传值
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值
传地址
是传值的一种特殊方式,只是他传递的是地址,不是普通的如int
那么传地址以后,实参和行参都指向同一个对象
传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值
$a = "123";
$b = &$a;//引用赋值(在源变量前加&符号)
echo $a."-".$b; // 输出:123-123
echo "<br/>";
$b = "456465"; // 输出:456465-456465
echo $a."-".$b;
// 结论 :
// PHP 传引用时 形参 发声改变的时候 实参也发生改变;
传值,就是仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
传引用,就是将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
对象默认是传引用 对于较大是的数据,传引用比较好,这样可以节省内存的开销
12、如何命令下运行PHP脚本(两种方式),如何向PHP脚本传递参数?
(1)运行PHP脚本
方法一:先进入php安装目录,执行 php 路径/文件名.php。
例:php my_script.php php -f "my_script.php"
方法二:php -r “php脚本”;(不需要加php的开始符和结束符)。
例:php -r "print_r(get_defined_constants());"
(2)向php脚本传递参数:
方法一:使用$argv or $argc参数接收
php脚本:
<?php
echo "接收到{$argc}个参数";
print_r($argv);
执行:
[[email protected] lee]# /usr/local/php/bin/php test.php
接收到1个参数Array
(
[0] => test.php
)
[[email protected] lee]# /usr/local/php/bin/php test.php a b c d
接收到5个参数Array
(
[0] => test.php
[1] => a
[2] => b
[3] => c
[4] => d
)
方法二:使用getopt函数
php脚本:
<?php
$param_arr = getopt(‘a:b:‘);
print_r($param_arr);
执行:
[[email protected] lee]# /usr/local/php/bin/php test.php -a 345
Array
(
[a] => 345
)
[[email protected] lee]# /usr/local/php/bin/php test.php -a 345 -b 12q3
Array
(
[a] => 345
[b] => 12q3
)
[[email protected] lee]# /usr/local/php/bin/php test.php -a 345 -b 12q3 -e 3322ff
Array
(
[a] => 345
[b] => 12q3
)
什么是魔术引号
waring:本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。
魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义
当打开时,所有的 ‘(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。
一共有三个魔术引号指令:
- magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。 参见 get_magic_quotes_gpc()。
- magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 参见 set_magic_quotes_runtime() 和 get_magic_quotes_runtime()。
- magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ‘‘。而双引号、反斜线 和 NULL 字符将不会进行转义。 如何取得其值参见 ini_get()。
以上是关于PHP 面试题 PHP部分的主要内容,如果未能解决你的问题,请参考以下文章