函数使用
* 第1题:用PHP打印出上周的时间格式,如:"2015-01-22 14:42:09"
echo date("Y-m-d H:i:s",strtotime("-1 day"))."<br/>";
echo date("Y-m-d H:i:s",strtotime("-1 week"))."<br/>";
echo date("Y-m-d H:i:s",strtotime("-1 month"))."<br/>";
* 第47题:求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
echo (strtotime("2007-3-6")-strtotime("2007-2-5"))/(3600*24);//结果:29 天
* 第4题:简述一下echo、print、print_r 区别
* print_r()主要用来输出数组的结构;echo 和 print 主要用来输出字符串,只不过echo 可同时输出多个字符串,print 只能输出一个字符串;
* echo 和 print 区别:
(1)使用命令方式来输出字符串,此时不需要小括号;看个人习惯,个人习惯使用命令方式来输出字符串
(2)使用函数方式来输出字符串,echo无返回值,print有返回值,成功返回 1,失败返回 0
* 第5题:如何实现字符串反转,如:"abcdefg" 反转成 "gfedcba";两种方式:(1)调用php自带的strrev()函数 (2)自定义函数 strrevv
echo strrev("abcdefg")."<br/>";
* 第6题:如何实现中文字符串截取无乱码的方法(mb_*系列函数),首先:需要开启 extension=php_mbstring.dll 扩展 ,结果:"你"
echo mb_substr("你好",0,1,"gb2312")."<br/>";
* 第7题:用PHP写出显示客户端和服务器端IP的代码
echo $_SERVER['REMOTE_ADDR'];//客户端IP
echo $_SERVER['SERVER_ADDR'];//服务器端IP
echo $_SERVER['PHP_SELF'];//结果:"/index.php" 当前脚本的名称(不包括路径和查询字符串)
echo $_SERVER["HTTP_REFERER"];//链接到当前页面的来源url
echo gethostbyname("www.v1pin.com");//获取指定域名的IP地址
echo getenv("REMOTE_ADDR");//获取客户端IP地址
echo getenv("SERVER_ADDR");//获取服务器端IP地址
* 第9题:简述include与require的区别?
* 相同点:
* (1)include与require都能把另外一个文件包含到当前文件中
* 异同点:
* (1)使用include时,当包含的文件不存在时系统会报出警告级别的错误,但并不影响程序的后续执行.
* (2)使用require时,当包含的文件不存在时系统会先报出警告级别的错误,接着又报出一个致命性的错误,将终止程序的后续执行.
* (3)require只会解释包含的文件一次,不会再解释第二次,因而效率相对较高;而include则会重复的解释包含的文件
* (4)载入时机不同:require在运行前载入包含文件,include在运行时载入包含文件
* 第10题:如何获取一个字符串中指定的字符?
$str="abcdefg";
echo $str{2}."<br/>";
* 第11题:如何批量替换字符串中的特定字符?如:"批量替换$content内容字符串中的所有双引号为单引号"
$content = str_replace($searchs=array("\""), $replaces=array("'"), $content);
* 第13题:addslashes()与 htmlspecialchars() 区别
* 区别:
* (1)addslashes()函数主要在指定的预定义字符前添加反斜杠,这些预定义字符主要包括:
* 单引号 (')
* 双引号 (")
* 反斜杠 (\)
* NULL
* addslashes()函数的主要作用是保证这些预定义字符能够正确入库,仅此而已
* (2)htmlspecialchars()函数把一些预定义的字符转换为HTML实体,这些预定义字符主要包括:
* & (和号) 成为 &
* " (双引号) 成为 "
* ' (单引号) 成为 '
* < (小于) 成为 <
* > (大于) 成为 >
* echo htmlspecialchars($str, ENT_COMPAT); //默认,仅编码双引号
* echo htmlspecialchars($str, ENT_QUOTES); //编码双引号和单引号
* echo htmlspecialchars($str, ENT_NOQUOTES);//不编码任何引号
* 第14题:如何去除数组中重复的值?使用数组函数 array_unique() 可以做到
$arr=array(
"8535455928182811",
"1558999140182811",
"1558999140182811",
"5795844841182811",
"5795844841182811",
);
$ordersn_arr=array_unique($arr);
/*
* 第15题:说一说自己对$GLOBALS全局变量和global关键字的理解?
1.global
Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。
- 在函数体内定义global变量,函数体内可以使用。
- (2)在函数体外定义global变量,函数体内不可以使用。
2.$GLOBALS
在 GLOBALS数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。GLOBALS数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。GLOBALS 之所以在全局范围内存在,是因为 GLOBALS是一个超全局变量。注意GLOBALS是一个超全局变量。注意GLOBALS 的写法,比如变量a1,写法为a1,写法为GLOBALS['a1']。
* 第16题:回调函数 call_user_func() 如何使用?
* 格式一:
* call_user_func("自定义函数","传递给自定义函数的参数1","传递给自定义函数的参数2","传递给自定义函数的参数3","传递给自定义函数的参数N....");//返回结果为自定义函数的返回结果
* 格式二:
* call_user_func(array("类名","方法名"),"传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N....");//返回结果为类中方法的返回结果
* 格式三:
* call_user_func_array("自定义函数",array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给函数的参数统一放到数组中
* 格式四:
* call_user_func_array(array("类名","方法名"),array("传递给类中方法的参数1","传递给类中方法的参数2","传递给类中方法的参数3","传递给类中方法的参数N...."));//传递给方法的参数统一放到数组中
//第17题:如何使用 array_multisort() 函数实现对多维数组进行排序?
//模拟从数据库中查询出来的记录(提示:二维数组)
$arr[] = array("age"=>20,"name"=>"小强");
$arr[] = array("age"=>21,"name"=>"李伟");
$arr[] = array("age"=>20,"name"=>"小亮");
$arr[] = array("age"=>22,"name"=>"黎明");
foreach ($arr as $key=>$value){
$age[$key] = $value['age']; //排序字段 "age"
$name[$key] = $value['name'];//排序字段 "name"
}
* 1、对 $arr 数组进行排序
* 首先按照年龄从大到小的顺序排列,如果年龄相同再按照名字的顺序排序,类似于sql中的order by
* 2、注意事项:
* (1)$age和$name 等价于 数据表的"age"和"name"列字段,类似于 "order by age desc,name asc"
* (2)排序顺序标志:
* SORT_ASC - 按照上升顺序排序
* SORT_DESC - 按照下降顺序排序
* (3)排序类型标志:
* SORT_REGULAR - 将项目按照通常方法比较
* SORT_NUMERIC - 将项目按照数值比较
* SORT_STRING - 将项目按照字符串比较
* (4)排序标志的默认值为: SORT_ASC 和 SORT_REGULAR
* (5)每个一维数组后指定的排序标志仅仅对该一维数组有效,一个一维数组不能指定两个同类的排序标志
* (6)该函数会改变数字索引,其它索引不改变
array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$arr);
//第18题:移除数组中元素中的几种方式?
unset($arr1[2]);
//提示:虽然删除了元素,但是没有重建数组索引
array_splice($arr2, 2, 1);
//参数2-开始位置 参数3-删除元素数量
//提示:删除了元素,并且重建了数组索引
array_splice($arr3, 2, 1,array("5"));
//参数1-原数组 参数2-开始位置 参数3-删除元素数量 参数4-替换被移除元素的数组
//提示:删除了元素,被移除的元素由参数4来替代
$arr5 = array_slice($arr4, 2, 1);//参数2-开始位置 参数3-删除元素数量
//提示:从数组中截取一段元素并返回(返回的数组索引被重建)
* 第19题:如何对数组元素进行递归转义?
* 对字符串或者输入进行 addslashes 操作
* @param <mix> $string 要进行转义的数组或字符串
* @param <int> $force 强制转义的意思
* @return <mix>
*/
function daddslashes($string, $force = 1) {
if(is_array($string)) {//是否对数组中各元素进行转义操作
$keys = array_keys($string);//数组中的键
foreach($keys as $key) {//循环数组中的键
$val = $string[$key];//获取数组中键所对应的元素值
unset($string[$key]);//删除元素
//给元素重新赋值(键名和键值都进行了转义:主要用于入库操作)
$string[addslashes($key)] = daddslashes($val, $force);//递归调用
}
} else {
$string = addslashes($string);//对字符串进行转义
}
return $string;//返回转义好的数组或字符串
}
* 第20题:如何获取文件扩展名?
* 获取文件扩展名
* @param $filename 文件名
*/
function fileext($filename) {
//strrchr():查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
//strrchr("aaaaaaaa.jpg",".");//结果:".jpg"
//substr(strrchr($filename, '.'), 1, 10);//结果:"jpg"
return addslashes(strtolower(substr(strrchr($filename, '.'), 1, 10)));
}
* 第27题:交换数组中的键和值
$a=array(
0=>"Dog",
1=>"Cat",
2=>"Horse"
);
* 第28题:删除数组中最后一个元素
$a=array("Dog","Cat","Horse");
array_pop($a);
* 第29题:array_push()函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度
$a=array("Dog","Cat");
$b=array("Horse","Bird");
$num=array_push($a,$b);//结果:3
* 第30题:array_rand() 函数从数组中随机选出一个或多个元素,并返回
* 注意:
* (1)如果只选取一个元素,那么返回选定该元素的键名
* (2)如果不止选取一个元素,则返回包含随机键名的数组
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo "<pre>";print_r(array_rand($a,2));
* 第32题:array_unshift() 函数在数组开头插入一个或多个元素
$stack = array(
array("admin1","123"),
array("admin2","123"),
array("admin3","123")
);
$num = array_unshift($stack,array("admin","123"));//返回数组元素个数
* 第33题:PHP排序函数汇总
* 总结:
* (1)arsort():按照数组键值对数组进行desc逆向排序并保持索引关系
* (2)asort() :按照数组键值对数组进行asc排序并保持索引关系
* (3)krsort():按照数组键名对数组进行desc逆向排序并保持索引关系
* (4)ksort() :按照数组键名对数组进行asc排序并保持索引关系
* (5)sort()/rsort() :按照数组键值对数组进行asc或desc排序,本函数为数组中的单元赋予新的键名,原有的键名将被删除
* 第34题:reset()及 end() 使用
$stack = array(
array("admin1","123"),
array("admin2","123"),
array("admin3","123")
);
echo "<pre>";print_r(reset($stack));//只剩下第一组
echo "<pre>";print_r(end($stack));//只剩下最后一组
* 第35题:crypt()及 md5() 单向加密函数的使用
echo crypt("123","v1pin")."<br/>";
echo crypt("admin","v1pin")."<br/>";
echo md5("admin");
* 第36题:parse_str() 函数把查询字符串解析到变量中
parse_str("id=23&name=John%20Adams");
echo $id."<br />";//23
echo $name."<br/>";//John Adams
parse_str("id=23&name=John%20Adams",$arr);
echo "<pre>";print_r($arr);
* 第42题:用最简单的代码编写一个获取三个数字中最大值的函数
echo max(30,5,25);//结果:30
* 第43题:如何将 1234567890 转换成 1,234,567,890 每三位用逗号隔开的形式?
echo number_format("1234567890")."<br/>"; //结果:1,234,567,890
默认以逗号作为分隔符
echo number_format("1234567890",2)."<br/>"; //结果:1,234,567,890.00
参数2-指定小数位数
echo number_format("1234567890",2,",",".")."<br/>"; //结果:1.234.567.890,00
参数2-指定小数位数 参数3-规定替代小数点符号的字符串 参数4-规定用作千位分隔符
* 第44题:如何尽可能高效的从标准URL中取得文件名
$url = "http://www.baidu.com/abc/de/fg.php?id=1";
echo substr(basename($url),0,strripos(basename($url),"?"))."<br/>";//结果:"fg.php"
* 第45题:stripos()、strpos()、strripos()、strrpos() 字符串函数的区别?
*
* (1)stripos():返回字符串在另一字符串中第一次出现的位置(大小写不敏感)
* (2)strpos() :返回字符串在另一字符串中首次出现的位置(对大小写敏感)
* (3)strripos():查找字符串在另一字符串中最后出现的位置(对大小写不敏感)
* (4)strrpos():查找字符串在另一字符串中最后出现的位置(对大小写敏感)
* 第46题:请写一个函数,实现以下功能:字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"
function str_change($str) {
$str = str_replace ( "_", " ", $str );
$str = ucwords ($str);
$str = str_replace(" ","",$str);
return $str;
}
echo str_change("open_door")."<br/>";//结果:"OpenDoor"
echo str_change("make_by_id")."<br/>";//结果:"MakeById"
* 第48题:如何用php的环境变量得到一个网页地址的内容?
* 如:"http://www.baidu.com/index.php?id=10"
echo $_SERVER['REQUEST_URI'];//结果:"/index.php?id=10"
in_array('01',array('1'));结果是1
简述单引号和双引号的用法
双引号串中的内容可以被解释而且替换,
单引号串中的内容总被认为是普通字符。
计算某段字符串中某个字符出现的次数
echo substr_count ($text,'g');
16. PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)
date_default_timezone_get()返回默认时区。
date_default_timezone_set()设置默认时区。
date()格式化本地时间/日期。
getdate()返回日期/时间信息。
gettimeofday()返回当前时间信息。
microtime()返回当前时间的微秒数。
mktime()返回一个日期的 Unix时间戳。
strtotime()将任何英文文本的日期或时间描述解析为 Unix时间戳。
time()返回当前时间的 Unix时间戳。
9. 常用的魔术方法有哪些?举例说明
答:php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
10、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?
答:$this 当前对象
self 当前类
parent 当前类的父类
$this在当前类中使用,使用->调用属性和方法。
self也在当前类中使用,不过需要使用::调用。
parent在类中使用。
11、类中如何定义常量、如何类中调用常量、如何在类外调用常量。
答:类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字const.
例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
即:类名 :: 类常量名;
12、 作用域操作符::如何使用?都在哪些场合下使用?
答:调用类常量
调用静态方法
13、__autoload()方法的工作原理是什么?
答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。
.魔术常量
__LINE__
文件中的当前行号。
__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
__FUNCTION__
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。