1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。
2.执行程序段<?php echo 8%(-2) ?>将输出(3)。
3.在HTTP 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(5)。
4.数组函数 arsort 的作用是(6);语句 error_reporting(2047)的作用是(7)。
5.PEAR中的数据库连接字符串格式是(8)。
6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):(9)。
7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(10)动态装载PHP模块,然后再用语句(11)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是(12);为了避免多次包含同一文件,可以用语句(13)来代替它们。
9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是(14)。
10.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on.
11.SQL 中LEFT JOIN的含义是(16)。如果 tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句(17)。
12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(18)。
13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
14.简述论坛中无限分类的实现原理。
15.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。
//答案(填空): 1. echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2. 0 3. (4)未授权 (5) header("HTTP/1.0 404 Not Found"); 4. (6)对数组进行逆向排序并保持索引关系 (7)All errors and warnings 5. 没弄明白 6. /<script[^>].*?>.*?<\/script>/si 7.(10) LoadModule php5_module "D:/xampp/apache/bin/php5apache2.dll" (11) AddType application/x-httpd-php-source .phps AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml 8.(12) 发生异常时include产生警告require产生致命错误 (13) require_once()/include_once() 9. serialize() /unserialize() 10. allow_call_time_pass_reference
11. (16) 自然左外连接 (17) select name , count(score) as sum_score from tbl_user left join tbl_score on tbl_user.ID=tbl_score.ID group by tbl_user.ID 12. 结束标识符所在的行不能包含任何其它字符除";"13./*** 遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。
*/function my_scandir($dir){ $files = array(); if ( $handle = opendir($dir) ) { while ( ($file = readdir($handle)) !== false ) { if ( $file != ".." && $file != "." ) { if ( is_dir($dir . "/" . $file) ) { $files[$file] = rec_scandir($dir . "/" . $file); }else { $files[] = $file; } } } closedir($handle); return $files; }}
希望以上提供的php 面试题,对大家有所帮助。祝大家找工作顺利哦。
一、问题部分
1. 对象的蓝图是什么?
答案:____________
2. 以下代码执行后,数组$a->my_value 中储存的值是什么?(三选)
{
var $my_value = array();
function my_class ($value)
{
$this->my_value[] = $value;
}
function set_value ($value)
{
$this->$my_value = $value;
}
}
$a = new my_class (‘a’);
$a->my_value[] = ‘b’;
$a->set_value (‘c’);
$a->my_class(‘d’);
?>
A.c
B.b
C.a
D.d
E.e
3. 如何让类中的某些方法无法在类的外部被访问?
A.把类声明为 private
B.把方法声明为 private
C.无法实现
D.编写合适的重载方法(overloading method)
4. 哪种 OOp 设计模式能让类在整个脚本里只实例化一次?
A.MVC 模式
B.抽象工厂模式(Abstract factory)
C.单件模式(Singleton)
D.代理模式(proxy)
E.状态模式(State)
5. 借助继承,我们可以创建其他类的派生类。那么在 pHp 中,子类最多可以继承几个父类?
A.1 个
B.2 个
C.取决于系统资源
D.3 个
E.想要几个有几个
6. 以下脚本近似的表示了一种在 pHp4 中无法实现的特性,请问这个特性叫什么?
{
function my_funct ($my_param)
{
user_error ("please define me", E_ERROR);
}
function b()
{
return 10;
}
}
?>
A.多重继承
B.接口
C.抽象方法
D.private 方法
E.函数重载(function overloading)
7. 假设定义了一个 testclass 类,它的构造函数的函数名是什么?
15
A.__construct
B.initialize
C.testclass
D.__testclass
E.只有 pHp5 才支持构造函数
8. 一个类如何覆盖默认的序列化机制?
A.使用__shutdown 和__startup 方法
B.调用 register_shutdown_function()函数
C.使用__sleep()和__wakeup()方法
D.无法覆盖默认序列化机制
E.使用 ob_start()将类放入输出缓冲中
9. 以下哪些面向对象的概念无法在 pHp4 中实现?
抽象类
Final 类
public、private、protected(ppp)方法
接口
A.抽象类
B.ppp 方法
C.ppp 方法和接口
D.以上所有都不可用
E.以上所有都可用
10.如何在类的内部调用 mymethod 方法?
A.$self=>mymethod();
B.$this->mymethod();
C.$current->mymethod();
D.$this::mymethod()
E.以上都不对
11.以下脚本输出什么?
{
var $my_var;
function _my_class ($value)
{
$this->my_var = $value;
}
}
$a = new my_class (10);
echo $a->my_var;
?>
A.10
B.Null
C.Empty
D.什么都没有
E.一个错误
12.以下脚本输出什么?
{
var $value;
}
$a = new my_class;
$a->my_value = 5;
$b = $a;
$b->my_value = 10;
echo $a->my_value;
?>
A.10
B.5
C.2
D.Null
E.什么都没有
13.以下脚本输出什么?
class my_class
{
var $value;
function my_class()
{
global $global_obj;
$global_obj = &$this;
}
}
$a = new my_class;
$a->my_value = 5;
$global_obj->my_value = 10;
echo $a->my_value;
?>
A.5
B.10
C.什么都没有
D.构造函数将报错
E.510
14.考虑如下一段代码,执行时,$eight_tenths->to_string 方法返回的字符串是 8/10 而不是希望的 4/5,为什么?
class fraction {
var $numerator;
var $denominator;
function fraction($n, $d) {
$this->set_numerator($n);
$this->set_denominator($d);
}
function set_numerator($num) {
$this->numerator = (int)$num;
}
function set_denominator($num) {
$this->denominator = (int)$num;
}
function to_string() {
return “{$this->numerator} / {$this->denominator}”;
}
}
function gcd($a, $b) {
return ($b > 0) ? gcd($b, $a % $b) : $a;
}
function reduce_fraction($fraction) {
$gcd = gcd($fraction->numerator,
$fraction->denominator);
$fraction->numerator /= $gcd;
$fraction->denominator /= $gcd;
}
$eight_tenths = new fraction(8,10);
/* Reduce the fraction */
reduce_fraction($eight_tenths);
var_dump($eight_tenths->to_string());
?>
A.reduce_fraction 函数必须返回一个值
B.reduce_fraction 函数必须接受一个整型值
C.gcd 函数有问题
D.必须通过引用的方式传递$eight_tenths 对象
E.对象的实例不能传递给方法以外的其他结构。
15.以下代码是做什么的?
require_once("myclass.php");
myclass::mymethod();
?>
A.静态调用 mymethod 方法
B.生成 myclass 的实例并调用 mymethod 方法
C.产生一个语法错误
D.默认 myclass 类最后被创建出的实例并调用 mymethod()
E.调用名为 myclass::mymethod()的函数
16.pHp 中有静态类变量吗?
A.有
B.没有
17.以下脚本输出什么?
{
function a ($x = 1)
{
$this->myvar = $x;
}
}
class b extends a
{
var $myvar;
function b ($x = 2)
{
$this->myvar = $x;
parent::a();
}
}
$obj = new b;
echo $obj->myvar;
?>
A.1
B.2
C.一个错误,因为没有定义 a::$myvar
D.一个警告,因为没有定义 a::$myvar
E.什么都没有
18.如何即时加载一个类?
A.使用__autoload 魔术函数
B.把它们定义为 forward 类
C.实现一个特殊的错误处理手段
D.不可能
E.用有条件限制的 include 来包含它们
19.__________提供了一个高性能的解决面向对象中重复出现的问题的方案?
答案:__________
20.以下脚本输出什么?
{
function a()
{
echo \parent called\;
}
}
class b
{
function b()
{
}
}
$c = new b();
?>
A.parent called
B.一个错误
C.一个警告
D.什么都没有
3,请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响
safe_mode是提供一个基本安全的共享环境。在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响。首先,一下尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果想要尝试操作某个文件,必须要用户该文件的读取或者写入的访问权限。
因此,在safe_mode打开的情况下,下列函数将会收到限制:
ckdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink
以上都是跟操作文件系统有关的函数,除此之外,一些php扩展的函数也会受到限制,不能在程序里面直接加载扩展,只能到php.ini里加载,而且php如果需要执行操作系统的程序时,必须在safe_mode_exec_dir中指定程序的路径,否则执行将失败。此外还有exec,shell_exec,pasathru,system,popen等函数会收到限制
4,PHP5中魔术方法函数有哪几个,请举例说明各自的用法
魔术方法:__construct() :实例化对象时被调用;__destuct():当删除一个对象或者对象操作终止是被执行;__call():调用对象不存在方法时被调用;__get():调用对象不存在的属性时被调用;__set():设置对象不存在的属性时被调用;__toString():打印一个对象时被调用,比如echo $obj,print($obj);__clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;__sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;__wakeup():unserialize之前被调用,做些对象的初始化;__isset()():检测对象是否存在属性的时候被调用,如 isset($c->name);__unset():unset一个对象属性时被调用,如:unset($c->name);__set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值;,__autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用。
魔术常量:__LINE__:返回当前行号;__FILE__:返回文件的完整路径和文件名,如果用在包含文件里面,则返回包含文件名,自 php4.0.2开始,__FILE__总是包含一个绝对路径,而在此前的版本有时候会包含一个相对路径__FUNCTION__:返回函数名称(自 php4.3.0新加的)。自php5起本常量返回该函数被定义时的名称,区分大小写,在php4中该值总是小写;__CLASS__:返回类的名称,自 php4.3.0新加的,自php5起本常量返回该类被定义时的名称,区分大小写,在php4中该值总是小写的;__METHOD__:返回类的方法名。 php5新加的
5,如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?
window下,假设php安装目录为c:\program files\php5\,那么使用命令窗口进入到该路径下,敲入php hello.php回车,则会执行当前路径下的hello.php文件,
如果要指向其他路径下php文件,可以在php 路径/hello.php ,这种形式称为CLI模式,我们平时通过浏览器看到的那种成为CGI模式,至于传递参数,php文件在cli模式下,直接通过在文件名称后面接参数,多个参数中间用空格隔开,在php文件里面是通过两个变量来获取参数的,一个是$argv,一个是$argc,前者是传递参数的数组,默认第一个为php文件的名称;后者为$argv的数组个数。
linux下,一般程序安装都会安装在/usr/bin/php下面,可以通过man php查看一下,如果有信息说明可以使用,使用方法类似于window下。如果前面这步成立,那么你可以直接 php php文件 来运行php文件,如果man php没有信息,则说明当前php执行文件没有在环境路径里面,可以修改环境路径包含php路径,也可以类似于window进入php路径,在执行 php php文件。其他类似于window下。
6,使对象可以像数组一样进行foreach循环,要求属性必须是私有
php5里面已经有了iterator接口,只要实现该接口,即可以实现对象私有属性被foreach遍历
class Sample implements iterator{
private $var = array(1,2,3,4,5);
public function __construct(){}
public function rewind(){ reset($this->var);}
public function current(){return current($this->var);}
public function key(){return key($this->var);}
public function next(){return next($this->var);}
public function valid(){return ($this->current()!==false);}
}
$s = new Sample();
foreach($s as $k=>$v){ echo $k.'='.$v.'<br/>';}
?>
3. 简单说明PHP的垃圾收集机制是怎样的?
对变量有个引用计数,计数到0时变量被销毁。
4. 使对象可以像数组一样进行foreach循环,要求属性必须是私有。
(Iterator模式的PHP5实现,写一类实现Iterator接口)
我记得好像对象也可以foreach,或者用反射的方式。 如果真要迭代模式实现的话,去看设计模式或者java的写法了。
5. 请写一段PHP代码,确保多个进程同时写入同一个文件成功
代码:
function writeData($path, $mode, $data){
$fp = fopen($path, $mode);
$retries = 0;
$max_retries = 100;
do {
if ($retries > 0) {
usleep(rand(1, 10000));
}
$retries += 1;
}while (!flock($fp, LOCK_EX) and $retries <= $max_retries);
if ($retries == $max_retries) {
return false;
}
fwrite($fp, "$data\n");
flock($fp, LOCK_UN);
fclose($fp);
return true;
}
6. 你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?
PHP脚本的执行效率
1, 代码脚本里计时。
2, xdebug统计函数执行次数和具体时间进行分析。,最好使用工具winCacheGrind分析
3, 在线系统用strace跟踪相关进程的具体系统调用。
数据库SQL的效率
sql的explain(mysql),启用slow query log记录慢查询。
通常还要看数据库设计是否合理,需求是否合理等。
想进入腾讯QQ吗?把以上的面试题全部搞会,然后拿着你的铺盖去腾讯吧,呵!!