PHP选择简答终极版

更新时间:2024-04-09 18:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第6章 自测题 一、单选题

1.PHP是哪种类型的语言( )。

A.编译型 B.解释型 C.两者都是 D.两者都不是 2.下面功能PHP无法实现的是( )。

A.服务器端脚本运行 B.命令行脚本运行

C.客户端图形界面(GUI)程序 D.浏览器端执行DOM操作 3.下面说法不正确的是:( )

A.PHP有4种标量类型:布尔型(boolean)、整型(integer)、浮点型(float)、字符串(string)

B.浮点型(float)与双精度型(double)是同一种类型 C.复合类型包括:数组(array)、对象(object)、资源(resource) D.伪类型:混合型(mixed)、数字型(number)、回调(callback) 4.若$y, $x为int型变量,则执行以下语句后,$y的值为( )。

$x=1; ++$x;

$y = $x++; ?>

A.1 B.2 5.下面代码的输出结果是( )。

$a= \ $b= &$a; unset($b); $b= \ echo $a; ?>

C.3

D.0

A.hello B.world C.NULL D.unset 6.下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串( )。 A.$s1+$s2 B.“{$s1}{$s2}” C.$s1.$s2 D.implode(‘’,array($s1,$s2))

7.getDate()函数返回的值的数据类型是( )。 A.整型 B.浮点型 C.数组 D.字符串 E.布尔型

8.下面哪个选项不属于正确的PHP代码的开始和结束标记( )。 A.<% %> B. C. D. E.

9.PHP中,单引号和双引号所包围的字符串有什么区别?( ) A.单引号速度快,双引号速度慢 B.双引号速度快,单引号速度慢

C.两者没有速度差别

D.双引号解析其中以$开头的变量,而单引号不解析 E.单引号解析其中\\r \\t等转义字符,而双引号不解析 10.PHP中的错误控制操作符是( )。

A.% B.$ C.# D.@ 11.定义常量的函数是( )。

A.define( ) B.constant( ) C.print( ) D.echo( ) 12.下面对于echo,print 的描述正确的是( )。

A.echo,print 都可以打印多个参数 C.echo可以打印多个参数,print不可以 13.执行下面的代码的结果是什么?( )

$bool = TRUE;

echo gettype($bool); echo is_string($bool); ?>

A.boolean B.boolean 0 false

14. 下面程序中$b的输出结果是( )。

if($a||$b=5){ echo 'todo'; }

echo $b; ?>

A. 4 B.5

15. 下面代码的执行结果是( )。

echo 1+2+\ ?>

A.0 B.3 16. 写出下面代码的结果( )。

echo 1>>0; echo 2>>1; echo 3<<2; ?>

A.012 B.106 17.下面的语句输出结果( )。

$foo = 'test'; $bar = <<<'EOT' $foo bar

B.print可以打印多个参数,echo不可以 D.echo,print都不可以打印多个参数

C.boolean FALSE

D.boolean

C.3 D.false

C.6 D.\

C.1112 D.123

EOT;

echo $bar; ?>

D.'EOT' test bar

A.$foo bar; B.'EOT' $foo bar EOT; C.test bar; EOT;

18.以下代码的执行后是,$result值为( )。

$x=\

$result=is_null($x); ?> A.null 二、简答题

B.true

C.false

D.1

1.__FILE__表示什么意思?

被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径 2.

$a=3; $b=4;

$c= $a>$b? $a-$b : $b*2; echo $c; ?>

该段代码输出是_____8________ 3.

$str=\

$$str=\’abcde’ $$str.=\’ok’ echo $cd; ?>

该段代码输出是_abcdeok____________ 4.写出下面代码执行的结果。

echo $a,\ ?>12 10 18

5.isset()和empty()的区别是什么?对不同数据的判断结果,包括$a=0; $a='0'; $a=''; $a=false; $a=null。

Isset判断变量是否存在,如果存在则返回真,empty判断变量是否为空,如果为空则返回真。 Isset判断:true,true,true,true,false。 Empty判断:true,true,true,true,true。

6.写出如下程序的输出结果:

$str1 = null;

$str2 = false;

echo $str1==$str2 ? '相等' : '不相等'; $str3 = ''; $str4 = 0;

echo $str3==$str4 ? '相等' : '不相等';

$str5 = 0; $str6 = '0';

echo $str4 === $str6 ? '相等' : '不相等'; ?>

第7章 自测题 一、单选题

1.以下程序运行结果为:( )。

$var = FALSE; if (empty($var)){ echo \ }else{

echo \ } ?>

A.null B.have value 提示错误

2.以下程序运行结果为( )。

$str = \

$str1 = \

$strc = strcmp($str, $str1); switch ($strc){ case 1:

echo \ break; case –1:

echo \ break; case 0:

echo \ break; default:

echo \ } ?>

A.str > str1 B.str < str1 str1

3.以下代码返回的结果为( )。

function p(){ return 1; }

if (p()){

echo \ }else{

C.无法确定

C.str = str1 D.什么也不显示,

D.str <>

echo \ } ?>

A.true B.false C.程序运行出错 D.根据版本来定 4.哪一个语言结构最能代表以下多路分支if语句的选择结构( )。

if ( $a == \ somefunction ( ); } else if ( $a == \ anotherfunction( ); } else if ( $a == \ dosomething( ); } else {

donothing( ); } ?>

A.没有default的switch语句 B.一个递归的函数调用 C.一个while语句 D.它是唯一的逻辑结构 E.使用default从句的switch语句

5.哪一个三元运算符相当于此脚本( )。

if ($a<10){ if($b>11){

if($c==10 && $d !=$c) { $x=0; } else { $x=1; } } } ?>

A.$x = ($a < 10 || $b > 11 || $c == 1 && $d !=$c ) ? 0 : 1;

B.$x = (($a < 10 && $b > 11) || ($c == 1 && $d !=$c ) ) ? 0 : 1; C.$x = ($a < 10 && $b > 11 && $c == 1 && $d !=$c ) ? 0 : 1; D.以上都不是

6.以下代码的执行后是,$result值为( )。

$a = \ $result = 1;

if(in_array($a,array(\ $result = 2; }else if($a == \ $result = 3;

}else if($a == \

?>

$result = 4; }else{

$result = 5; }

C.3

D.4

E.5

A.1 B.2

7.下面代码的执行结果是( )。

for($i=0;i<10;$i++){ print $i; } ?>

A.0123456789 二、练习题

B.012345678910 C.无输出 D.死循环

1.下面的程序输出是什么?

$int a = 5;

function factorial() {

for($int_i=$int_a; $int_i>0; $int_i--) { $int_a = $int_a * $int_i; } }

factorial(); echo $int_a; ?>5

2.求$a,$b,$c三个数中的最大值和最小值? echo max($a,$b,$c); echo min($a,$b,$c);

3.for($k=0;$k=1;$k++); 和for($k=0;$k==1;$k++) 的结果是什么? for(k=0; k=1; k++); 执行次数为无限次。 for(k=0; k==1; k++); 执行次数为0次

4.写出以下程序运行的结果。

if($a=3 || $b=3){ $a++; $b++; }

echo $a.”,”.$b; ?>

if($a=3 | $b=3){ $a++; $b++; }

echo $a.”,”.$b; ?>

结果:________1,1_________

结果:_____4,4____________

第8章 自测题 一、单选题

1.以下代码执行结果为( )。

$a = \

function print_a(){ $a = \ global $a; echo $a; }

echo $a; print_a(); ?>

A.Hello B.php mysql !! C.Hello Hellomysql !!

2.执行完以下代码后,变量$num的值为( )。

$num = 10;

function demo($number) { $number = $number+20 }

demo(&$num); echo $num,\ ?>

A.10 B.20 C.30

3.下列代码执行后,输出结果正确的是( )。

function sum() { $result = 1; $result++; }

sum();

echo $result; ?>

A.1 B.2

C.运行错误 4.以下代码执行结果为( )。

$a = \

function print_a() { global $a; $a = \ }

D.Hello D.显示错误

D.都不对

php

echo $a; ?>

D.错误

A.phper B.hellophper C.hello 5.以下程序运行结果为( )。

function total_Sum($c=5, $b=3,$a){ echo $a.\ }

total_Sum(1); ?>

A.5+3+1=9 B.1+5+3 =9 C.提示错误,并有显示:+3+1 = 4 D.9 6.下面代码加入下面那个函数后返回TRUE:( )。 return ? == 'A';

A.、ord(65) B.chr(65) C.65+'' 7.PHP程序使用utf-8编码,以下程序输出结果是( )。

$str = 'hello你好世界'; echo strlen($str); ?>

D.''+65

A.9 B.13 C.18 D.17 8.下列那个选项是正确的引用文件的方法( )。

A.require和include B.require和function C.define和include D.function和include 二、编程题

1.写一个函数实现字符串翻转。 PHP函数strrev()或者 function str($str) {

$len=strlen($a); $b=\

for($i=$len-1;$i>=0;$i--) {

$b.=$a[$i]; }

return $b; }

2.写出下列代码的输出结果。

function myfunc($argument){ echo $argunment + 10; }

$variable = 10;

echo “myfunc($variable)=”.myfunc($variable); ?>10myfunc(10)=

3. 下面代码执行完成后的结果是什么?

function change(){ static $i = 0; $i++;

return $i; }

echo change(); echo change(); ?>12

4.请写一个函数将1234567890转换成1,234,567,890,即每3位用逗号隔开的形式。 $str = strrev($str); $arr = str_split($str,3); $str = strrev(implode($arr,',')); return $str;

5.语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替? 1、PHP程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后PHP会将网页档重新编译,让引入档成为原先网页的一部分。

2、PHP程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。

3、require() :无条件包含,如果文件不存在,会报出一个fatal error.脚本停止执行 4、include() : 有条件包含,如果文件不存在,会给出一个 warning,但脚本会继续执行 5、推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

6.请写出下列PHP代码的执行结果。

$var1 = 5; $var2 = 10;

function foo(&$my_var) { global $var1; $var1 += 2; $var2 = 4; $my_var += 3;

?>

4 8 7 10 4

return $var2; }

$my_var = 5;

echo foo($my_var) . \echo $my_var . \echo $var1 . \echo $var2 . \$bar = 'foo'; $my_var = 10;

echo $bar($my_var) . \

第9章 自测题 一、单选题

1.下面的脚本运行以后,$array数组所包含的值是( )。

$array = array('1 ', '1 ');

foreach ($array as $k=>$v) { $v = 2; } ?>

A.array ('2 ' , '2 ') B.array ('1 ' , '1 ') C.array (2 , 2) D.array (Null , Null)

2.如果你想对一个数组进行排序,排序的方式是按照元素的值从小到大排序。同时,需要在排序后保持关键字与值的对应关系。下面哪个函数实现这个功能( )。

A.ksort() B.asort() C.krsort() D.sort() E.usort()

3.下面代码的输出是( )。

$s = '12345 ';

$s[$s[1]] = '234 '; echo $s; ?>

A.12345 B.12245 C.22345 D.11345 E.array

4.在PHP中哪个变量数组总是包含所有从客户端发出的cookies数据( )。 A.$_COOKIES B.$_COOKIE C.$_GETCOOKIE D.$_GETCOOKIES 5.以下关于key()和current()函数的叙述,请找出两个正确的答案( )。 A.key()函数用来读取目前指针所指向资料的索引值 B.key()函数是取得目前指针位置的内容资料

C.current()函数用来读取目前指针所指向资料的索引值 D.current()函数是取得目前指针位置的内容资料 6.问$x的结果是( )。

$arrOne = array(0,1); $arrTwo = array(3,4); $x =$arrOne+$arrTwo; ?>

A.array(0,1); B.array(0,1,2,3); C.array(3,4); D.代码有错

7.要循环操作非顺序索引的数组时,可以使用下列哪个函数来读取数组当前元素的索引值( )。

A.key() B.next() C.prev() D.current()

8.以下程序运行结果为( )。

$A=array_fill(-5,3,\ for ($i=0; $i<5; $i++){

echo \ } ?>

A.$A[0] = Hello $A[1] = Hello $A[2] = $A[3] = $A[4] =

B.$A[0] = Hello $A[1] = Hello $A[2] = Hello $A[3] = $A[4] = C.$A[0] = $A[1] = $A[2] = $A[3] = $A[4] = D.程序运行提示错误

9.以下代码的运行结果为( )。

$A[] = 1; $A[] = 2; $A[] = 3 $A[2] = 4;

for ($i=0;$i

echo $A[$i]; } } ?>

A.2 B.3 C.4 D.1 10.下面哪个选项没有将john添加到users数组中( )。

A.$users[] = 'john'; B.array_push($users, 'john'); C.$users ||= 'john'; D.array_unshift($users, 'john'); 11.输出为Mozilla/4.0(compatible;MSIE5.01;Window NT 5.0)时,可能的输出语句是( )。 A.$_SERVER['HTTP_USER_AGENT_TYPE']; B.$_SERVER['HTTP_USER_AGENT']; C.$_SERVER['USER_AGENT']; D.$_SERVER['AGENT'];

12.下面代码的输出正确的是( )。

$a = array(1=>5,5=>8,22,2=>'8',81); echo $a[7]; echo $a[6]; echo $a[3]; ?>

A.空2281 B.空8122 13. 下面代码的输出结果是( )。

$a[bar]='hello'; echo $a[bar];

C.8122空

D.空空空

echo $a['bar']; ?>

A.hello B.空空 C.报错 D.hellohello 14. 对于正面的代码,能够正确得到结果'yellow'的代码是( )。

$fruits = array('strawberry'=>'red', 'banana'=>'yellow'); ?>

A.echo \ B$fruits['banana']\

C.echo \ D{$fruits[banana]}\

15.以下代码的执行后是,$result值为( )。

$srcArray=array('a', 'b', 'c', 'd'); $randValue=array_rand($srcArray); $result=is_string($randValue); ?>

..

echo echo

\\

banana banana

is is

A.a B.false C.true E.c

16.输出的是( )。

A.3 B.false C.null E.0 二、练习题

D.b

D.1

1.简单描述asort()、ksort()、rsort()的作用分别是什么。 asort()按照键值对关联数组进行升序排序

ksort() 函数对关联数组按照键名进行升序排序。

rsort() 函数对数值数组进行降序排序。(该函数为array中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。)

2.用PHP写一段代码,实现不使用第3个变量,交换$a,$b的值,$a,$b的初始值自己定。 $a = “abcd”;

$b = “1234″;

echo “初始化时 a=$a,b=$b ”;

$a = $a . $b; $b = strlen( $b );

$b = substr( $a, 0, (strlen($a) – $b ) ); $a = substr( $a, strlen($b) ); echo “交换后 a=$a,b=$b

”;

3.请将二维数组按照name的长度进行重新排序,按照顺序将id赋值(从1开始)。

$Tarray = array(

array(‘id’ => 0, ‘name’ => ‘123’), array(‘id’ => 0, ‘name’ => ‘1234’),

array(‘id’ => 0, ‘name’ => ‘1235’), array(‘id’ => 0, ‘name’ => ‘12356’), array(‘id’ => 0, ‘name’ => ‘123abc’) );

foreach($tarray as $key=>$val) {

$c[]=$val['name']; }

function aa($a,$b) {

if(strlen($a)==strlen($b)) return 0; return strlen($a)>strlen($b)?-1:1; }

usort($c,'aa'); $len=count($c);

for($i=0;$i<$len;$i++) {

$t[$i]['id']=$i+1;

$t[$i]['name']=$c[$i]; }

echo '

'; print_r($t); echo '
';

4.写一个函数,算出两个文件的相对路径。 如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';

计算出$b 相对于 $a 的相对路径应该是'../../c/d'。

$ainfo=parse_url($a); $binfo=parse_url($b); $apath=ltrim($ainfo['path'],?/'); $bpath=ltrim($binfo['path'],?/'); $arr=explode(?/?,$apath); $brr=explode(?/?,$bpath);

$count=count($arr); for($i=0;$i<$count;$i++)

{

if($arr[$i]==$brr[$i]) {

$brr[$i]=?..?; } else { break; } }

$cha=implode(?/?,$brr); print_r($cha);

5.请写出常见的排序算法,并用PHP实现冒泡排序,将数组按照从小到大的方式进行排序。

冒泡排序法,快速排序法,插入排序法(一维数组) 冒泡:

$a=array(1,9,34,78,2,11,5); Function maopao($arr){ $count=count($arr); For($i=0;$i<$count;$i++) {

For($j=$count-2;$j>=$i;$j–) {

If($arr[$j]>$arr[$j+1]) {

$tmp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; } } } }

6.输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100~192.168.1.150

范围内。

Echo $ip=getenv(?REMOTE_ADDR?); $ip=Str_replace(?.?,”\

If($ip<1921681150 && $ip>1921681100) {

Echo ?ip在192.168.1.100—–192.168.1.150之间?; } Else {

Echo ?ip不在192.168.1.100—–192.168.1.150之间?;

}

7.请指出以下代码的错误之处(圈出来并加以改正)。

function baz($y $a) { $x = new Array(); $x[sales] = 60; $x[profit] = 20;

foreach($x as $key = $value) {

echo $key + ' ' + $value + '
'; } } ?>

函数参数列表中少了逗号、“new Array()”是不正确的、行末用了冒号而不是分号、foreach中没有用“=>”及用“+”来连接字符串 8.有下面一段程序:

$data = array(‘a’, ‘b’, ‘c’); foreach($data as $key=>$val) { $val = &$data[$key]; } ?>

问题1:程序执行时,每一次循环结束后变量$data的值是什么?请解释。 问题2:程序执行完后,变量$data的值是什么?请解释。 文中所述数组$data的完整表达形式如下: $data = array(

0 => 'a', // 内存空间A 1 => 'b', // 内存空间B 2 => 'c', // 内存空间C );

循环过程:

$key = 0; $val = 'a'; // $val复制了变量$data[0]的值。这个赋值导致变量$val创建并指向一个新的内存空间X;$val和$data[0]指向不同的内存空间。

$val = &$data[0]; // $val成为一个引用,直接指向变量$data[0](原始数组第一个单元)。$val和$data[0]指向相同的内存空间A。

$key = 1; $val = 'b'; // 赋值操作导致$val所指向的内存空间的值被改变了;$data[0]指向相同的内存空间,所以$data[0]的值也改变了。

$val = &$data[1]; // $val还是一个引用,不过现在指向变量$data[1](原始数组第二个单元)。$val和$data[1]指向相同的内存空间B。

$key = 2; $val = 'c'; // 赋值操作导致$val所指向的内存空间的值被改变了;$data[1]指向相同的内存空间,所以$data[1]的值也改变了。

$val = &$data[2]; // $val还是一个引用,不过现在指向变量$data[2](原始数组第三个单元)。$val和$data[2]指向相同的内存空间C。

第10章 自测题 一、单选题

1.如何声明一个PHP的用户自定义类?( )

A.

class Class_name() { } class Class_name { } ?> ?>

C.

function Function_name { } function Function_name () { } ?> ?> 2.下面哪一项不是PHP中面向对象的机制?( )

A.类 B.属性、方法 C.单一继承 D.多重继承 3.如何让一个对象实例调用自身的该对象的方法函数“mymethod”?( ) A.$self=>mymethod(); B.$this->mymethod(); C.$current->mymethod(); D.$this::mymethod(); 4.下面哪项描述是错误的?( )

A.父类的构造函数与析构函数不会自动被调用

B.成员变量需要用public protected private修饰,在定义变量时不再需要var关键字 C.父类中定义的静态成员,不可以在子类中直接调用 D.包含抽象方法的类必须为抽象类,抽象类不能被实例化 5.如果成员没有声明限定字符,属性的默认值是( )。

A.private B.protected C.public D.final 6.PHP中调用类文件中的$this表示( )。

A.用本类生成的对象变量 B.本页面 C.本方法 D.本变量

7.在PHP的面象对象中,类中定义的析构函数是在( )调用的。

A.类创建时 B.创建对象时 C.删除对象时 D.不自动调用 8.以下是一个类的声明,其中有两个成员属性,对成员属性正确的赋值方式是( )。

class Demo {

private $one; static $two;

function setOne($value) { $this->one=$value; } }

$demo=new Demo(); ?>

A.$demo->one=\ B.Demo::$two=\C.Demo::setOne(\ D.$demo->two=\9.在PHP 5的类的定义中,无法使用3P修饰的内容是( )。

A.属性 B.静态方法 C.常量 D.方法

10.在PHP 5的类的定义中,如果方法M1能够调用方法M2,但M2不能调用M1,那么M1和M2应该符合( )。

A.M2是静态方法而M1不是 B.M1是静态方法而M2不是 C.M1和M2都是静态方法 D.M1和M2都不是静态方法 11.以下四条接口与抽象类的对比分析,哪条是错误的?( ) A.接口和抽象类都可以只声明方法而不实现它 B.抽象类可以定义类常量,而接口不能 C.抽象类可以实现具体的方法,而接口不能 D.抽象类可以声明属性,而接口不能

12.要实现PHP 5在面向对象编程方面最令人激动的自动加载功能,我们可以( )。 A.定义函数名为__autoload()的自动加载函数 B.通过php.ini或者ini_set()设置自动加载目录 C.在编译PHP 5时加上默认未激活的模块

D.使用spl_autoload_register()函数和相关函数来指定自动加载函数 13.针对PHP 5中特有的魔法方法(Magic Methods),下列四句中哪句是错误的?( ) A.__get和__set方法用于设置并不存在的类实例的属性成员 B.__call和__invoke方法用于调用并不存在的类的方法成员

C.__sleep和__wakeup方法用于在序列化类实例时处理其中的外部资源和冗余数据 D.通过__get方法,我们可以实现类的只读属性,而__set方法可以实现只写属性 14.如果你想要自动加载类,下面哪种函数声明是正确的?( )

A.function autoload($class_name) B.function __autoload($class_name, $file)

C.function __autoload($class_name) D.function _autoload($class_name) E.function autoload($class_name, $file) 15.以下哪段代码可以正常执行?( )

A.abstract class boo{ B.abstract class boo{ abstract function func(); function func(); } }

class coo extends boo{ class coo extends boo{ abstract function func(){} function func(){} } }

$coo = new coo(); $coo = new coo();

C.class boo{ D.abstract class boo{ abstract function func(); abstract function func(); } }

class coo extends boo{ class coo extends boo{ function func(){} function func(){} } }

$coo = new coo(); $coo = new coo(); 16.下面哪些说法是错误的?( )

A.如果一个类的成员前面有访问修饰符private,那么这些成员不能被继承,并且在类的外部可见。但如果类的成员被指定为protect或public,则可以被继承,在类的外部也是可见的

B.PHP 5中,final关键字可以禁止继承和重载

C.PHP 5中,析构函数的名称是__destruct(),并且不能有任何参数

D.继承接口的类必须实现接口中声明的所有方法,在PHP中,如果继承接口的类没有实现接口中指定的方法,将会产生一个致命的错误 17.执行以下代码,输出结果是( )。

abstract class a{

function __construct(){ echo “a”; } }

$a=new a(); ?>

A.a B.一个错误警告 C.一个致命性的报错 D.无输出 18.执行以下代码,输入结果是( )。

class a{

function __construct(){

echo “echo class a something”; } }

class b extend a{

function __construct(){

echo “echo class b something”; } }

$a=new b(); ?>

A.echo class a something echo class b something B.echo class b something echo class a something C.echo class as something D.echo class b something

19.哪种OOP设置模式能让类在整个脚本里只实例化一次?( ) A.MVC B.代理模式 C.状态模式 D.抽象工厂模式 E.单件模式 20.借助继承,我们可以创建其他类的派生类。那么在PHP中,子类最多可以继承几个父类?( )

A.1个 B.2个 C.取决于系统资源 D.想要几个有几个 二、简答题

1.你如何访问和设置一个类的属性? $object = new myclass(); $newstr = $object->test; $object->test = \

2.PHP 5中魔术方法有哪几个?并说明其用法。 __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():实例化一个对象时,如果对应的类不存在,在该方法被调用。

3.简述public,protected,private,static,const和final的区别和调用方式。 1.public

使用对象:类、接口、成员

介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的 2.private

使用对象:成员

介绍:成员只可以在定义它的类中被访问 3.static

使用对象:类、方法、字段、初始化函数

介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。静态方法是类方法,是被指向到所属的类而不是类的实例。静态字段是类字段,无论该字段所在的类创建了多少实例,该字段只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的,而不是在创建实例时执行的。 4.final

使用对象:类、方法、字段、变量

介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),字段值不允许被修改。 5.const

用于类成员变量的定义,一经定义,不可修改. const只能接受静态的标量 6.protected 使用对象:成员

介绍:成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成员所属类的子类。

4.分别输出(1)、(2)运行结果,试简述过程。

class sample {

function __call($a, $b){

echo ucwords(implode(' ', $b).' '.$a); }

function ads(){ ob_start(); echo 'by'; return $this; }

function ade(){

$c = ob_get_clean();

$this->php('brophp', $c); } }

$inst = new sample(); ?>

(1)$inst->cmstop('welcome', 'to');Welcome To Cmstop (2)$inst->ads()->ade();Brophp By Php

5.面向对象中接口和抽象类的区别及应用场景?

、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定义。

2、接口中全部是抽象方法,方法不用使用abstract定义。 3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。

6.serialize() /unserialize()函数的作用是什么?

这个函数作用就是序列化数据,返回一个可存储的字符串,该函数有利于存储或传递PHP的值,同时不丢失其类型和结构

unserialize()就是把序列化的字符串转换回PHP的值。 三、实验题

1.请简单写一个类,实例化这个类,并写出调用该类的属性和方法的语句。 2.用面向对象来实现A对象继承B和C对象。 3.通过static关键字限制一个类最多只能创建出一个实例化对象(提示:单态设计模式)。 4.使用面向对象中封装、继承、多态三大特性及接口的应用,实现在同一个电脑主板的PCI插槽中,安装声卡、网卡和显示卡等符合PCI规范的不同功能的PCI设备。当插入不同的PCI设备卡时,就开启被插入卡的功能(提示:声明一个PCI接口、声卡类、网卡类、显示卡类、主板类、安装工人类,其中每个PCI设备都要实现PCI接口的规范)。

第11章 自测题 一、单选题

1.以下代码运行结果为( )。

$A = \ $B = \ $C = strstr($A,\ $D = stristr($B,\ echo $C .\ ?>

A.PHP is Linux B.is Linux C.PHP is inux D.PHP is 2.下列哪个函数是将数组转换为字符串?( )

A.imploed() B.explode() C.arsort() D.natsort() 3.以下代码运行的结果为( )。

$first = \ $second = explode(\ $first = implode(\ echo $first; ?>

A.This,course,is,very,easy,! B.This course is very easy ! C.This course is very easy !, D.提示错误 4.以下程序横线处应该使用的函数为( )。

$email='gaofeng@lampbrother.com.cn'; $str = ____($email, '@'); $info = ____('.',$str); ____($info); ?>

输出结果为:Array ([0] => @lampbrother [1]=>com[2]=>cn)

A.strchr, split, var_dump B.strstr, explode, print_r C.strstr,explode, echo D.strchr, split, var,_dump 5.PHP中,下列哪个函数是将字符串前后颠倒?( )

A.strrev() B.strrpos() C.strstr() D.strfirst() 6.以下字符的长度是( )。

$text = \

echo strlen(trim($text)); ?>

A.9 B.5 C.7 D.3 7.将字符串中所有英文单字的开头字母转换为大写的函数应该是( )。

A.ucfirst() B.strtolower() C.strtoupper() D.ucwords()

8.在PHP中,'+'操作符的功能不包括( )。

A.字符串连接 B.数组数据合并 C.变量数据相加 D.类型自动转换 9.下列PHP函数中不能直接在页面输出字符串的函数是( )。

A.echo B.sprintf C.printf D.print 二、练习题

1.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?

str_split(),implode(),split(),replace(),indexOf()

2.$str = \,使用什么函数可以把字符串str转换为包含各个数字的数组?

3.请写一个函数,实现以下功能:

字符串“open_door”转换成“OpenDoor”、”make_by_id”转换成“MakeById”。

function str_explode($str){

$str_arr=explode(“_”,$str);$str_implode=implode(” “,$str_arr); $str_implode=implode

(“”,explode(” “,ucwords($str_implode))); return $str_implode; }

$strexplode=str_explode(“make_by_id”);print_r($strexplode); 方法二:$str=”make_by_id!”; $expStr=explode(“_”,$str); for($i=0;$i

echo ucwords($expStr[$i]);

}方法三:echo str_replace(? ?,”,ucwords(str_replace(?_?,? ?,?open_door?)));

4.用PHP写出显示客户端IP与服务器IP的代码? 获取客户端IP:get_env(―REMOTE_ADDR‖);

获取服务器端IP:$_SERVER[\

5.写一个函数,尽可能高效地从一个标准URL里取出文件的扩展名。

1.$a=\2、$b=parse_url($a);

3、Echosubstr($b['path'],strpos($b['path'],'.')); 或者:4、Echoend(explode('.',$b['path']));

例如: http://www.test.com.cn/abc/de/fg.inc.php?id=1需要取出php或.php。 6.实现中文字符串截取无乱码的方法。

Mb_substr();

7.写出以下程序运行结果。

$str[1]='123456'; $str[2]='brophp';

$str[1][2]='lampbrother'; var_dump($str); ?>

第20章 自测题 一、单选题

1.请看下面的代码,数据库关闭指令将关闭哪个链接标识?( )

$link=mysql_connect(\ $link2=mysql_connect(\ mysql_close(); ?>

A.$link1 B.$link2 C.全部关闭 D.报错 2.下列哪些数据库管理系统是PHP不支持的?( )

A.MySQL B.IBM DB2 C.PostgreSQL

D.Microsoft SQL Server E.以上没有一个PHP不支持 3.mysql_affected_rows()对哪个操作没有影响?( )

A.SELECT B.DELETE C.UPDATE D.INSERT 4.取得搜索语句的结果集中的记录总数的函数是( )。

A.mysql_fetch_row B.mysql_rowid C.mysql_num_rows D.mysql_fetch_array 5.mysql_insert_id()函数的作用是( )。

A.查看下一次插入记录时的ID号 B.查看刚刚插入过的自动增长ID值 C.查看一共做过多少次insert操作 D.查看一共有多少条记录 6.以下代码执行结果是( )。

mysql_connect(\

$result = mysql_query(\ while($row = mysql_fetch_array($result,MYSQL_ASSOC)){ echo \ } ?>

A.报错 B.只打印第一条记录 C.循环换行打印全部记录 D.无任何结果

7.假设有一个数据库mydb中有一个表tb1,表中有6个字段,主键为ID,有10条记录,ID从0到9,以下代码输出结果是( )。

$link = mysql_connect(\ or die(\

$result = mysql_query(\、tb1 where id < 5\ or die(\ echo mysql_num_fields($result); mysql_close($link); ?>

A.6 B.5 C.4 8.使用以下哪条指令能够实现数据库的长久连接?( ) A.mysql_connect B.mysql_connectd C.

D.3

mysql_pconnetcd

D.mysql_pconnect

二、简答题

1.SQL注入漏洞产生的原因是什么?如何防止?

SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。 防止SQL注入:

1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置 2、执行sql语句时使用addslashes进行sql语句转换 3、Sql语句书写尽量不要省略小引号和单引号

4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*

5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

6、Php配置文件中设置register_globals为off,关闭全局变量注册

7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。 2.指出以下代码片段中的SQL注入漏洞及解决方法。(magic_quotes_gpc = off)

mysql_query(\like '%$_GET [keywords]%'\

注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]和$_GET[keyword] 解决注入漏洞:

$_GET[catid]=intval($_GET[catid]);

$sql=”select id,title from content where catid=?{$_GET[catid]}? and title like ?%$_GET[keywords]%”;

$sql=addslashes($sql); Mysql_query($sql); 三、实验题

1.实现用户注册功能。需要建一张用户信息表,并编写注册和结果两个页面。用户在注册页面填写注册信息,提交到结果页面后显示注册的结果。 具体要求:

(1)在MySQL数据库的test数据库中,创建一张用于存放用户注册信息的表,表中有“用户名”、“密码”两个字段,并且设置“用户名”字段为主键。

(2)用户注册页面要显示一个输入框、一个密码框和一个“注册”提交按钮。

(3)用户单击“注册”按钮时,要用JavaScript技术对用户的输入信息进行判断,包括:用户名或者密码不能为空,密码的长度必须大于6位,用户名和密码的长度必须小于10位。假如用户输入不符合上述规范,则弹出相应的错误提示信息终止提交;只有当用户输入满足上述规范时,才允许将表单提交到结果页面。

(4)如果用户名在表中已经存在,则在结果页面提示用户重新输入用户名。 (5)如果用户名在表中不存在,则将用户的注册信息插入到数据库中,并在结果页面显示“注册成功”的提示信息。

(6)用户注册成功后,在结果页面显示“现在已经有??位注册用户了!”,并将所有的注册用户信息以列表方式显示出来。

2.在MySQL数据库,使用的用户名为root,密码为php。其中的一个数据库名称为lamp,其中有两个表名为type和border。下面为两个表中的关系与数据。

表type

Id 1 2 3 A B C 表Border

Id 1 2 3 4 5 6 A1 A2 B1 B2 C1 C2 bordername 1 1 2 2 3 3 Typeid Typename 编写一个脚本遍历两张表中的数据形成目录结构,一级为type表中的数据,每个类别下为border表中的数据。 具体要求:

(1)数据库文件(具体操作语句)。 (2)正确显示一级type表中数据。

(3)正确显示每个类下border表中数据。 3.根据题目要求,实现以下功能:

表名my_user

id 9 10 3 6 5 张三 张三 李四 王五 孙六 name tel 15812345678 13844555544 0431-5566556 13521212125 13099887755 content 大专毕业 本科毕业 中专毕业 大专毕业 本科毕业 E-mail zs1@163.com zs2@126.net ls@brophp.com ww@gmial.com sl@brophp.com (1)查询所拥有name等于\张三\的记录,并显示在网页上。 (2)查出E-mail为使用brophp.com网站的邮箱用户。

(3)如果有10万条记录,需要根据电话号码查出对应的详细信息,需要进行哪些优化?

第23章 自测题 一、单选题

1.在PHP中哪个变量数组总是包含所有客户端发出的Cookies数据( )。 A.$_COOKIES B.$_COOKIE C.$_GETCOOKIE D.$_GETCOOKIES 2.Session和Cookie的区别说法错误的是( )。 A.Session和Cookie都可以记录数据状态 B.在设置Session和Cookie之前不能有输出

C.在使用Cookie前要使用cookie_start()函数初始 D.Cookie是客户端技术,Session是服务器端技术

3.Cookie的属性中,用来确定Cookie有效日期的属性是( )。

A.NAME B.EXPIRES C.PATH D.DOMAIN 4.以下代码的执行结果是( )。

$username = \ $password=\

$_SESSION[\ ?>

A.将注册Session B.运行错误

C.无法注册Session D.根据客户的浏览器来决定是否可以注册session

5.PHP Session扩展默认将Session数据储存在( )。 A.SQLite Database B.MySQL Database C.MemCache D.File System E.Session Server 二、简答题

1.Cookie和Session的几个问题如下:

A.简述它们的工作原理,区别与关系,各自的存储位置等。 B.各自的优缺点是什么?

C.禁用Cookie后,Session能否正常使用?

D.Session在服务器端是存在哪里的?是共有的还是私有的?如何进行遍历?

COOKIE保存在客户端,用户通过手段可以进行修改,不安全,单个cookie允许的最大值是3k。 而SESSION保存在服务器端,相对比较安全,大小没有限制。 禁用了cookie之后session不能正常使用。

Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。 Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。 Session文件是公有的。

2.如何修改Session的生存时间?

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache 方法2:$savePath = \

$lifeTime = 小时 * 秒;

session_save_path($savePath); session_set_cookie_params($lifeTime); session_start();

方法3:setcookie() and session_set_cookie_params($lifeTime);

三、实验题

使用Session实现一个完整的购物车功能,并使用memcached保存Session。

本文来源:https://www.bwwdw.com/article/hn6r.html

Top