php面试基础题

19 篇文章 0 订阅

1.  以下php代码的输出结果?

$i=10;

$n = $i++;

echo $n, $i++, ++$i

2. include与require的区别?
3. 以下代码,是判断字符串中是否存在#符号, 错误之处在于?
if ( strpos($str, “#”)) {  … }

4. 程序代码使用utf-编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数?
$str = “您好hello”;

echo strlen($str);

5. 什么是时间戳? 时间戳能代表的最小年份和最大年份是多少?

6.  php.ini配置文件中magic_quotes_gpc, magic_quotes_runtime的作用是什么?应该开启还是关闭?

7.  现有一个文本体积大约2G, 计算机内存只有1G, 需要使用php对数据进行分析,如何读取如此体积的文件?

8.  php的序列化各反序列化,有何用途?

9.  php的魔术方式包含哪些(越多越好)? 在何情况下被自动调用?

10.  ArrayAccess接口的作用是什么?

11.  php类的静态成员变量与非静态成员变量有何区别?

12.  如何记录php程序错误至系统日志(如windows的事件查看器,Linux的syslog)?

13.  SQL注入最有效的防御方式是什么?


*****************************************************************************************************************************************************************************************

1、10 11 13
2、两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。
3、如果#在字符串的首位那就是返回0,php会将0自动转换成false进行判断,因此错误,正确写法是:if ( strpos($str, “#”) !== false) { … }
4、结果是11;计算的是字节数
5、时间戳是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数;时间戳能代表的最小年份是1970,最大年份是2038年。
6、PHP magic_quotes_gpc=on的情况:我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。
你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
PHP magic_quotes_gpc=off的情况:使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
magic_quotes_runtime 转义字符:当你的数据中有一些 \ ” ‘ 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前加上\
7、分行读取,fopen、fread当然还可以使用fseek
8、序列serialize是为了产生一个可存储的值,便于存储除resource类型的所有数据,反序列unserialize即将序列的数据还原为原来的值
9、以下为总结的在使用类时可用的魔术方法,魔术方法会在某种待定情况下被自动调用,但前提是该方法被定义。有些方法不一定要定义在类中,还可以写在程序中作为一个函数。
__construct() 构造函数,创建对象时自动调用
__destruct() 析构函数,不需要创建
__clone() 克隆函数,调用clone方法时自动调用
__set() 当程序试图写入一个不存在或不可见的成员变量时自动调用。该函数在类中定义时必须有两个参数:变量称和变量值 。
__get() 当程序调用一个未定义或不可见的成员变量时自动调用__get()来读取变量值。定义时必有有一个参数:变量名
__call() 当程度试图调用不存在或不可见的成员方法时,自动调用__call()来存储方法名及其参数。该方法包含两个参数:方法名和方法参数。其中方法参数以数组形式存在。
__sleep() 使用serialize()实现序列化对象时,先执行该方法,清除对象并返回一个该对象中所有变量的数组。
__wakeup() 使用unserialize()还原一个被序列化的对象时,先执行该方法,恢复在序列化中可能丢失的数据库连接及相关工作
__toString() 当使用echo或print输出对象时,将对象转化为字符串
__autoload() 调用未被实例化的类时,自动调用,在指定路径下查找和该类名称相同的文件。
10、让对象使用起来像一个PHP数组,而不用使用对象操作符->直接使用数组符号[]就可以了
11、静态成员变量 :可以用类名直接访问,也可以用类的实例化来访问,静态成员变量是所有对象共用的,只有一份,不会为每一个对象都分配一个不同的值
非静态成员变量:不可以直接使用类名访问, 需用实例化来访问,为对象独有的
12、编辑php.ini配置文件,修改或添加
log_errors = On
error_log = syslog
13、参数化查询,参数格式是以 “?” 字符加上参数名称而成。例如:UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4


本文原处:http://www.mianwww.com/html/2012/11/17332.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值