include():包含没有文件时会报错,产生警告,但程序继续运行;
require():包含没有文件时会报错,导致致命错误,程序停止运行;
include_once()和require_once()用法同上。但是它们都会首先检查所要包含的文件是否已载入,如果已经载入了则不会重复载入。
8、PHP5中魔术方法函数有哪几个,举例说明各自用法 (15个魔术方法的总结)
__autoload() 类文件自动加载函数
__construct() 构造函数、__destruct() 析构函数
__call() 当所调用的成员方法不存在(或者没有权限)时调用,用于对错误后做一些操作或者提示信息
__clone() 该函数在对象克隆时自动调用,其作用是对克隆的副本做一些初始化操作
__get() 当所对象所调用的成员属性未声明或者级别为private或者protected等时,我们可以在这个函数里进行自己的一些操作
__set() 当所对未声明或者级别为private或者protected等进行赋值时调用此函数,我们可以在这个函数里进行自己的一些操作
__isset() 当对一个未声明或者访问级别受限的成员属性调用isset函数时调用此函数,共用户做一些操作
__unset() 当对一个未声明或者访问级别受限的成员属性调用unset函数时调用此函数,共用户做一些操作
__toString() 在将对象引用作为字符串操作时自动调用,返回一个字符串
__sleep() 是在序列化时自动调用的,序列化这里可以理解成将信息写如文件中更长久保存
__wakeup() 该魔术方法在反序列化的时候自动调用,为反序列化生成的对象做一些初始化操作
__set_state() 当调用var_export()时,这个静态方法会被调用(自PHP 5.1.0起有效)。本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。
__invoke() 当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
__callStatic() 它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用
9、数组的创建方式有哪些?举例说明
使用array():$数组名=array(值,.......);
使用compact()函数可以将一个或多个变量转换为数组
使用array_combine()函数将两个数组合并成一个新数组,其中的一个数组是键名,另一个数组的值为键值。
使用range()函数创建数组:$number = range(0,5); or 指定步长:$number = range(0,50,10);
使用array_fill()函数:用给定的值类填充数组。 array_fill(start,number,value)
10、数组的遍历方式有哪些?举例说明
使用for语句循环遍历数组: for ($i= 0;$i< count($arr); $i++)
使用foreach语句遍历数组:
foreach($arrays as $value)
foreach($arrays as $key=>$value)
联合使用list()、each()和while循环遍历数组。
while(list($key,$val)= each($colors)) //list()用一步操作给一组变量进行赋值,each()返回数组中当前元素的键/值对并向后移动数组指针
11、php关联数组按照键、值正向排序:array(‘c‘=>3, ‘a‘=>4, ‘b‘=>2, ‘e‘=>5)
$arr = array(‘c‘=>3, ‘a‘=>4, ‘b‘=>2, ‘e‘=>5)ksort($arr); //正向按键排序
asort($arr); //正向按值排序
rksort($arr);//反向按键排序
rasort($arr);//反向按值排序
12、对一个含有重复值的数组去重:array(‘a‘=>1, ‘b‘=>2, ‘c‘=>3, ‘d‘=>4, ‘a‘=>1, ‘b‘=>3, ‘d‘=>4)
$arr = array(‘a‘=>1, ‘b‘=>2, ‘c‘=>3, ‘d‘=>4, ‘a‘=>1, ‘b‘=>3, ‘d‘=>4);
$result = array_unique($arr); //只保留重复值的第一个键
13、sort()、asort()和ksort()有什么区别?分别在什么情况下使用?
sort() 只依据值从小到大排序,键值不参与排序
asort() 依据值排序,键值参与排序
ksort() 依据键值排序,值参与排序
14、请说明php中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
15、如何访问和设置一个类的属性?
$object = new myclass();
$newstr = $object->test;
$object->test = "info";
16、写出php5权限控制修饰符
public private protected
17、列举php数据类型
整型(integer)、浮点型(float)、字符串型(string)和布尔型(Boolean)四种标量类型,数组(array)和对象(object)两种合成类型,空值(null)和资源(resource)两种特殊类型。
18、如何修改SESSION的生存时间
setcookie(session_name(), session_id(), time() + 86400, "/");
or
19、简要说说PHP框架
20、一个网页地址如 http://www.phpres.com/index.html,如何得到内容?
$data = file_get_contents(‘http://www.phpres.com/index.html‘) ;
21、简述如何得到当前执行脚本路径,包括所得到参数。
echo "http://".$_SERVER [‘HTTP_HOST‘].$_SERVER[‘PHP_SELF‘];
22、写出数据类型int char varchar datetime text的意思,varchar和char有什么区别?
int是数字类型,char固定长度字符串,varchar可变长度字符串,datetime日期时间型,text文本字符串
23、如何调试并查看错误日志?
打开调试功能:php.ini 里设置error_reporting = E_ALL以及 display_errors = On,重启 web服务(apache)。
一般来讲,Linux系统下(以Centos为例) Php的错误日志会记录在 /var/log/httpd 下的errror_log 里,可通过tail -n 5 -f error_log查看最近几条错误日志。
24、php与apache(nginx)的关系?php代码是如何执行的?
php 是一种编程语言,Apache是一种站点服务器软件,在Apache的conf配置文件里有LoadModule php5_module modules/libphp5.so的类似语句加载php, Apache 处理请求页面时,发现页面中内嵌的 <?php> ... >,就会根据配置调用 php 解释器执行这段 php 代码。
25、echo,print()和print_r()有什么区别?
echo是PHP语句,无返回值;print和print_r是函数,可以有返回值。
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
26、使用php写一段简单查询,查出所有姓名为”张三“的内容并打印。
$result = mysql_query("SELECT * FROM users WHERE name=‘张三‘");while($row=mysql_fetch_array($result))
{
echo $row[‘name‘].$row[‘tel‘].$row[‘addr‘];
echo"
";
}
27、请写一个函数验证电子邮件的格式是否正确(要求使用正则)
function checkMail($mailText)
{if(ereg("^[0-9a-z][a-z0-9\._-]{1,}@[a-z0-9-]{1,}[a-z0-9]\.[a-z\.]{1,}[a-z]$", $mailText)echo "correct!";else
echo "wrong!";
}
28、不用php内置函数实现数组排序。如:array("d"=>100, "c"=>22, "a"=>22)
$arr=array("d"=>100,"b"=>22,"c"=>22,"a"=>22);
$newArr=array();while($arr)
{
$key=null;
$value=null;foreach ($arr as $k=>$v)
{if($v>$value||($v==$value&&$k>$key))
{
$key=$k;
$value=$v;
}
}
$newArr[$key]=$value;
unset($arr[$key]);
}
print_r($newArr);?>