201709考试批次《PHP》结课作业学生姓名学习中心学号专业年级层次北京语言大学网络教育学院《PHP》结课作业注意:本学期所布置的结课作业,请同学一律按照以下要求执行:1) 结课作业提交起止时间:2017年8月2日--9月11日。
(届时平台自动关闭,逾期不予接收。
)2) 结课作业课程均需通过“离线作业”栏目提交电子版,学院不收取纸介的结课作业,以纸介回寄的作业一律视为无效;3)截止日期前可多次提交,平台只保留最后一次提交的文档,阅卷时以最后一次提交的结课作业为准,截止日期过后将关闭平台,逾期不交或科目提交错误者,按0分处理;4) 提交文档要求:提交的文档格式为doc、rar,大小10M以内;5) 必须严格按照每门课程的答题要求完成作业,没有按照学院要求来做的结课作业,将酌情扣分。
一. 论述题(本大题共5小题,请任选其中两道题作答,每小题25分,总分50分)1、双引号和单引号的区别。
答:双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\ 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)2、请简述PHP常用的超全局变量(8个)。
常用的超全局变量(8个) $_GET >get 传送方式$_POST >post 传送方式$_REQUEST >可以接收到get 和post 两种方式的值$GLOBALS >所有的变量都放在里面$_FILES >上传文件使用千锋教育-中国IT职业教育领先品牌精品课程千锋教育全程面授$_SERVER >系统环境变量$_SESSION >会话控制的时候会用到$_COOKIE >会话控制的时候会用到3、HTTP 中POST、GET、PUT、DELETE方式的区别HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE ,与其必不可少的URL的全称是资源描述符,我们可以这样理解:url 描述了一个网络上资源,而post、get、put、delegate就是对这个资源进行增、删、改、查的操作!3、简述优化数据库的方法?(1)表的设计要规范,即要符合数据库设计三范式。
(2)适当建立索引,在频繁作为检索条件,更新较少的字段上建立索引,以提高查询速度。
(3)分表查询,有水平分割、垂直分割。
(4)读写分离,读(read)、写(create、update、delete)。
(5)建立存储过程4、语句include和require的区别是什么?为避免多次包含同一文件,可以用什么语句代替他们?答:pHp程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后pHp 会将网页档重新编译,让引入档成为原先网页的一部分。
pHp程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中,require() :如果文件不存在,会报出一个fatal error.脚本停止执行,include() : 如果文件不存在,会给出一个warning,但脚本会继续执行,推荐使用require_once()和include_once(),可以检测文件是否有重复包含说明php中传值与传引用的区别,并说明传值什么时候传引用??二.编程题(本大题共4小题,请任选其中两道题作答,每小题25分,总分50分1、用autoload($class) 实现Lib目录下的类的自动加载并可以兼容子目录。
$request->action = lcfirst(implode(array_map('ucfirst',explode('-', strtolower($request->action)))));------------------------------------------------------------function __autoload($class){$cls = strtolower(str_replace("_","/",$class));if(file_exsits(LIB.$cls.'.php')){include_once(LIB.$cls.'.php');}else{die("not found {$class} class");}}defined("LIB",'/data/wwwroot//lib/'); $author = new Lib_Author();----------------------------------------------------------- function __authload($class){$cls = explode("_",$class);if(@is_dir($cls[1])){if(@is_file($cls[2])){include_once("CON_PATH".$cls[1].'/'.$cls[2].".php"); }else{dir('error');}}else if(@is_file($cls[1].".php")){include_once("CON_PATH".$cls[1].".php"); }else{dir('error');}}---------------------------------------function __autoload($class){$cls = explode("_",$class);$file = get_file($cls);if($file=='error'){die('error');}include_once($file);}function get_file($dir){if(is_array($dir)){foreach($dir as $k=>$v){$tmpdir .= $v.'/';if(is_dir('CON_PATH'.$tmpdir)){continue();}else if(is_file('CON_PATH'.$tmpdir.".php")) {return 'CON_PATH'.$tmpdir.".php";}else{return 'error';}}return 'error';}return 'error';}defined("CON_PATH","/data/wwwroot//app/cntroller/"); $sb = new controller_sb();------------------------------------function __autoload_my_classes($classname){# ... your logic to include classes here}spl_autoload_register('__autoload_my_classes');2、用set_error_handle 去捕获错误并输出, 级别自己定。
set_error_handle(callback,level)function callback(int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] ){}function dealErrorHandler($errno,$errstr,$errfile,$errline){switch($errno){case E_USER_ERROR:echo "error [$errno] $errstr fatal error on line $errline in file $errfile";break;case E_USER_WARNING:echo "my warning [$errno] $errstr":break;case E_USER_NOTICE:echo "my notice[$errno] $errstr";break;default:echo "unkonwn error type :[$errno] $errstr";break;}}set_erro_handler(dealErrorHandler);trigger_error("notice", E_USER_NOTICE);trigger_error("warning", E_USER_WARNING);trigger_error("error", E_USER_ERROR);3、简述两种屏蔽php程序的notice警告的方法。
4、有如下数据库, 用原生态mysql扩展去连接并查询user表的前十行。
host: 192.168.0.254port: 3306user: onepass: piecedatabase: db_user table: user。