strlen和mb_strlen都是用于获取字符串长度。 strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数; 可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。
总结:
strlen函数不管是字符串是单字节编码还是多字节编码,函数返回的结果都是字符串的总字节数。mb_strlen函数当字符串是单字节编码时,函数返回的结果是字符串的总字节数。当字符串是多字节编码时,函数返回的结果是字符串的个数。 mb_strlen函数在没有指定字符编码时,表示使用默认字符编码,即单字节编码,函数返回的是字符串的总字节数。PHP默认是单字节编码(内部字符编码),多字节编码方式有gbk、utf-8等。示例:
<?php /* strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) */ header('Content-Type:text/html;charset=utf-8'); // (1)英文字符串 $str1 ="duang~"; echo strlen($str1);//总字节数为6,内部字符编码,单字节编码 echo "<br />"; echo mb_strlen($str1);//总字节数为6,内部字符编码 echo "<br />"; echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码 echo "<hr />"; // (2)中文字符串 $str2 = "你是我的小苹果"; echo strlen($str2);//总字节数为21,内部字符编码,单字节编码 echo "<br />"; echo mb_strlen($str2);//总字节数为21,内部字符编码 echo "<br />"; echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码 ?>方法一,使用 PHP 内置函数 mb_substr() 方法二,自定义函数,以 utf-8 为例,如下:
<?php /* 相关题目 1:实现中文字串截取无乱码的方法。 */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "你是我的温暖阳光"; echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖 // ================方法二======================= /** * utf8编码字符串截取无乱码 * @param $str string 要处理的字符串 * @param $start int 从哪个位置开始截取 * @param $length int 要截取字符的个数 * @return string 截取后得到的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } // 示例 $str = "你是我的温暖阳光"; echo substr_utf8($str,2,4);//输出 我的温暖 ?>方法一,使用php内置函数,确保配置中已打开mbstring扩展 方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
<?php /* 相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北” */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "中国2北333京"; echo mb_strlen($str,'utf-8');//输出字符数 8 echo mb_substr($str, 3,1,'utf-8');//输出 北 // ================方法二======================= /** * utf8编码字符串截取无乱码 * @param $str string 要处理的字符串 * @param $start int 从哪个位置开始截取 * @param $length int 要截取字符的个数 * @return string 截取后得到的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } /** * utf8编码字符串计算长度 * @param $str string 要处理的字符串 * @return int 字符串的长度或字符个数 */ function strlen_utf8($str) { return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY)); } // 示例 $str = "中国2北333京"; echo strlen_utf8($str);//输出字符数 8 echo substr_utf8($str,3,1);//输出 北 ?>A. split B. implode C. explode D. join 答案:A
答案:1
二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。 这两种结构除了在如何处理失败之外完全一样。 once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
别是_;为了避免多次包含同一文件,可以用语句_来代替它们。 在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;require_once()/include_once()
include、require
POST 根据你 php.ini 文件配置(默认是 8M) GET 的话大小限制在 2KB
get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。
A.php:
<?php function fa(){ echo "in Function A\n"; } ?>B.php:
<?php include 'a.php'; function fb() { fa(); echo "in Function B\n"; } ?>C.php:
<?php include 'a.php'; include 'b.php'; fa(); fb(); ?>答案:存在问题,a.php 被包含了两次,导致 fa()函数重复定义,使用 include_once 避免重复包含。
echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只能打印出简单类型变量的值(如int,string) print_r可以打印出复杂类型变量的值(如数组,对象)
echo -- 输出一个或者多个字符串 print --输出一个字符串 print_r -- 打印关于变量的易于理解的信息。
在实际使用中, print 和 echo 两者的功能几乎是完全一样。 可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别: 在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。 echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:
(1) echo可以输出多个字符串,像下面这样: echo 'a','b','c'; 如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成: echo ('a'),('b'),('c'); 它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用: $ret = print 'Hello World'; (有返回值所以能够用在更复杂的表达式中,可以判断是否输出成功等表达式)所以它能用在更复杂的表达式中。
另外,echo的效率相对比较快~
如下代码:
<?php $a='hello '; $b='php world!'; echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示 print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔 print $a,$b.'<br />';//使用逗号时报错。 ?>说明:
,是 echo 本身支持的一种语法,而.则是字符串连接操作符,使用,的效率要高一些。(少了连接运算)echo可以使用,来分隔字符串变量,也可以使用,来分隔字符串变量;print只能使用.来分隔字符串变量。echo效率比print高总结: echo命令和print命令相同,没有区别 echo()和print()有区别: echo()没有返回值,与echo命令相同 print()有返回值,总是返回1
补充: printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
answer: print is a function,echo is a language construct
说明:
使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
输出 10
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。 一个 regular variable 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
<?php header("Content-Type:text/html;charset=utf-8"); /** * 反转utf8编码的中文字符串 * @param string $str * @return string */ function strrev_utf8($str) { return join("",array_reverse(preg_split("//u", $str))); } // 实例 $str = "悄悄是别离的笙箫"; echo strrev_utf8($str); ?>客户端 IP:$_SERVER["REMOTE_ADDR"] 服务器端 IP:$_SERVER["SERVER_ADDR"]
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__ 获取参数,使用$_SERVER["QUERY_STRING"]
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。 @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。 很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 MySQL 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
A. users[]="john";B.arrayadd( users, "john"); C. array_push($users, "john"); D. $users ||= "john" ; 答案:BD
isset 检测一个变量是否设置 empty 检测是否为空 注意二者的区别,如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。 isset是检测变量是否设置/定义,empty是检测已定义的变量的值是否为空。
当前脚本名称:$_SERVER["PHP_SELF"]或者 SERVER["SCRIPTNAME"];链接到当前页面的前一页面的URL地址: _SERVER["HTTP_REFERER"]。
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。 assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。 asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。 ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
打开或者关闭错误报告,如: error_reporting(0); error_reporting(E_ALL & ~ E_NOTICE); error_reporting(E_ALL);
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024 其中: 1 对应 E_ERROR,2 对应 E_WARNING,4 对应 E_PARSE, 8 对应 E_NOTICE,16 对应 E_CORE_ERROR,32 对应 E_CORE_WARNING ,64 对应 E_COMPILE_ERROR,128对应 E_COMPILE_WARNING,256 对应 E_USER_ERROR, 512 对应 E_USER_WARNING,1024 对应 E_USER_NOTICE。 error_reporting(2047)意味着上述错误都会显示出来。
写出以下程序的输出结果 (CBSI)
<?php $str = 'cd'; $$str = 'hotdog';//$cd = 'hotdog'; $$str .= 'ok';//$cd .= 'ok'; echo $cd; ?>hotdogok
获取一个普通变量的值作为这个可变变量的变量名。
定义常量:define() 检测常量是否定义:defined() 如:
define("TEST","happy new year!"); if( defined("TEST")){ echo TEST; } 执行程序段<?php echo 8%(-2) ?>将输出 %为取模运算,输出 0 $a % $b其结果的正负取决于 $a 的符号。echo ((-8)%3)."<br />";//输出 -2 echo (8%(-3))."<br />";//输出 2
arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用 report All errors and warnings,见 21 题中相关题目。
LoadModule php5_module "c:/php/php5apache2.dll"; AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
输出 1 count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。 对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
answer: 1
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。 PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。 PHP 脚本主要用于以下三个领域:
服务端脚本。这是 PHP 最传统,也是最主要的目标领域。命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。编写桌面应用程序。你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo: echo "My string $variable"; 你也可以使用这种方法:
echo <<<END This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of itsown, and can't contain any extra white space. END;输出结果为 4
$arr = array('james', 'tom', 'symfony');请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。 打印第一个元素:echo $arr[0]; 以’,’合并成字符串:echo implode(',',$arr);echo $a{0} 或 echo $a[0]
值是 e
=== 表示全等,是指的两个变量的值和类型都相等。 如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
A. printf("%.2d\n", 42); B. printf("%1.2f\n", 42); C. printf("%1.2u\n", 42); answer:B
answer:C 分析:
<?php $text = 'Content-Type:text/xml'; print substr($text, strchr($text,':'));//出错,strchr返回的是字符串 echo "<br />"; print substr($text, strchr($text,':')+1);//strchr返回的是字符串,字符串+1,返回ontent-Type:text/xml echo "<br />"; print substr($text, strpos($text,':')+1);//返回text/xml echo "<br />"; print substr($text, strpos($text,':')+2);//返回ext/xml echo "<br />"; print substr($text, 0,strchr($text,':'));//出错,strchr返回的是字符串 echo "<br />"; ?>A. True B. False answer:A
answer: NULL
A. Using the strpos function B. Using the == operator C. Using strcasecmp() D. Using strcmp() answer:C
answer:hello
answer:1
answer:ture
使用 intval 函数,echo intval("09"),或者使用 int 强制类型转换。
A. array_flip() B. array_reverse() C. sort() D. rsort() 答案:BD
array(2,5,7) max 用法示例如下:
<?php echo max(1,3,5,6,7);//7 echo "<br />"; echo max(array(2,4,5));//5 echo "<br />"; echo max(0,'hello');//0 echo "<br />"; echo max('hello','0');//hello echo "<br />"; echo max(-1,'hello');//hello echo "<br />"; //对于多个数组,max从左向右比较 //因此在本例中:2 == 2,但是4 < 5 $val = max(array(2,4,8),array(2,5,7));//array(2,5,7) var_dump($val); echo "<br />"; // 如果同时给出数组和非数组作为参数,则总是将数组视为最大值返回 $val = max('string', array(2, 5, 7), 42); var_dump($val); ?>define("MYPI",3.14);
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
date_default_timezone_set('PRC'); echo date("Y-m-d H:i:s",time());
GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。
print_r $val = 333;// error,print_r 是一个函数,需加上括号,如果是 print 则可以 print_r($val = 333); // 正确 $a += ($b = 4) + 5;// notice, a未定义,但可以正确运行‘ foo[bar] = 'enemy';// notice,最好 bar 加上引号function x($a = "1", $b){}`// 无,但给参数默认值应尽量从右向左
aaaa
501
分析: 在 PHP 中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用 global 显式声明使用全局变量或直接用$_GLOBALS 来引用。
52
12
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
// 注释内容 C 风格的单行注释 # 注释内容 unix 风格的单行注释 /* 注释内容 */ C 风格的多行注释
global $a 或者 $GLOBALS['a']
aa is 'aa'
break 和 continue 可以用在 switch 语句中,或是循环结构中 它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而 continue 则表示跳出本次循环,继续下一次的循环,不会终止循环。
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
array --声明一个数组 count -- 计算数组中的单元数目或对象中的属性个数 foreach -- 遍历数组 list -- 将数组中元素的值赋值给变量,批量声明变量 explode -- 将字符串转成数组 implode -- 将数组转成一个新字符串 array_merge -- 合并一个或多个数组 is_array -- 检查是否是数组 print_r -- 输出数组 sort -- 数组排序 array_keys -- 返回数组中所有的键名 array_values -- 返回数组中所有的值 key -- 从关联数组中取得键名
trim()-- 去除字符串首尾处的空白字符(或者其他字符) strlen()-- 字符串长度 substr()-- 截取字符串 str_replace()-- 替换字符串函数 strstr()-- 查找字符串的首次出现位置,返回 第一次出现的位置开始到结尾的字符串 explode()-- 将字符串分割成数组 implode()-- 将数组分割成字符串 str_repeat() -- 重复一个字符串 addslashes() -- 转义字符串 htmlspecialchars() -- HTML 实体转义
A. a B. false C. true D. b E. c 答案:B mixed array_rand( array $input [, int $num_req ] ) 从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。 所以使用 array_rand 函数,返回结果要么是键名,要么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
A. 1 B. 2 C. 3 D. 4 E. 5 答案:B
A. 不区分 B. 区分 答案:A 函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。
A. null B. true C. false D. 1 答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。 在下列情况下一个变量被认为是 NULL:
被赋值为 NULL尚未被赋值unset()$_ENV; $_SERVER; $_REQUEST; $_FILES; $_SESSION; $_COOKIE; $_GET; $_POST; $GLOBALS;
使用 in_array 函数,代码如下:
<?php $a = array( array('id' => 0), array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 500) ); $b = array('id' => 500); if (in_array($b,$a)) { echo "Yes"; }else{ echo "No"; } ?>使用 array_merge()函数
a为false, b = $c = 0
strlen和mb_strlen都是用于获取字符串长度。 strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数; 可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。
总结:
strlen函数不管是字符串是单字节编码还是多字节编码,函数返回的结果都是字符串的总字节数。mb_strlen函数当字符串是单字节编码时,函数返回的结果是字符串的总字节数。当字符串是多字节编码时,函数返回的结果是字符串的个数。 mb_strlen函数在没有指定字符编码时,表示使用默认字符编码,即单字节编码,函数返回的是字符串的总字节数。PHP默认是单字节编码(内部字符编码),多字节编码方式有gbk、utf-8等。示例:
<?php /* strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) */ header('Content-Type:text/html;charset=utf-8'); // (1)英文字符串 $str1 ="duang~"; echo strlen($str1);//总字节数为6,内部字符编码,单字节编码 echo "<br />"; echo mb_strlen($str1);//总字节数为6,内部字符编码 echo "<br />"; echo mb_strlen($str1,'utf-8');//总字节数或字符长度为6,指定字符编码(utf-8),多字节编码 echo "<hr />"; // (2)中文字符串 $str2 = "你是我的小苹果"; echo strlen($str2);//总字节数为21,内部字符编码,单字节编码 echo "<br />"; echo mb_strlen($str2);//总字节数为21,内部字符编码 echo "<br />"; echo mb_strlen($str2,'utf-8');//字符长度为7,指定字符编码(utf-8),多字节编码 ?>方法一,使用 php 内置函数 mb_substr() 方法二,自定义函数,以 utf-8 为例,如下:
<?php /* 相关题目 1:实现中文字串截取无乱码的方法。 */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "你是我的温暖阳光"; echo mb_substr($str, 2,4,'utf-8');//输出 我的温暖 // ================方法二======================= /** * utf8编码字符串截取无乱码 * @param $str string 要处理的字符串 * @param $start int 从哪个位置开始截取 * @param $length int 要截取字符的个数 * @return string 截取后得到的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } // 示例 $str = "你是我的温暖阳光"; echo substr_utf8($str,2,4);//输出 我的温暖 ?>方法一,使用php内置函数,确保配置中已打开mbstring扩展 方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
<?php /* 相关题目 2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北” */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "中国2北333京"; echo mb_strlen($str,'utf-8');//输出字符数 8 echo mb_substr($str, 3,1,'utf-8');//输出 北 // ================方法二======================= /** * utf8编码字符串截取无乱码 * @param $str string 要处理的字符串 * @param $start int 从哪个位置开始截取 * @param $length int 要截取字符的个数 * @return string 截取后得到的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } /** * utf8编码字符串计算长度 * @param $str string 要处理的字符串 * @return int 字符串的长度或字符个数 */ function strlen_utf8($str) { return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY)); } // 示例 $str = "中国2北333京"; echo strlen_utf8($str);//输出字符数 8 echo substr_utf8($str,3,1);//输出 北 ?>A. split B. implode C. explode D. join 答案:A
答案:1
二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。 这两种结构除了在如何处理失败之外完全一样。 once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
别是_;为了避免多次包含同一文件,可以用语句_来代替它们。 在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;require_once()/include_once()
include、require
POST 根据你 php.ini 文件配置(默认是 8M) GET 的话大小限制在 2KB
get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。
A.php:
<?php function fa(){ echo "in Function A\n"; } ?>B.php:
<?php include 'a.php'; function fb() { fa(); echo "in Function B\n"; } ?>C.php:
<?php include 'a.php'; include 'b.php'; fa(); fb(); ?>答案:存在问题,a.php 被包含了两次,导致 fa()函数重复定义,使用 include_once 避免重复包含。
echo, print是PHP语句print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只能打印出简单类型变量的值(如int,string) print_r可以打印出复杂类型变量的值(如数组,对象)
echo -- 输出一个或者多个字符串 print --输出一个字符串 print_r -- 打印关于变量的易于理解的信息。
在实际使用中, print 和 echo 两者的功能几乎是完全一样。 可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别: 在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。 echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:
(1) echo可以输出多个字符串,像下面这样: echo 'a','b','c'; 如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成: echo ('a'),('b'),('c'); 它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用: $ret = print 'Hello World'; (有返回值所以能够用在更复杂的表达式中,可以判断是否输出成功等表达式)所以它能用在更复杂的表达式中。
另外,echo的效率相对比较快~
如下代码:
<?php $a='hello '; $b='php world!'; echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示 print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔 print $a,$b.'<br />';//使用逗号时报错。 ?>说明:
,是 echo 本身支持的一种语法,而.则是字符串连接操作符,使用,的效率要高一些。(少了连接运算)echo可以使用,来分隔字符串变量,也可以使用,来分隔字符串变量;print只能使用.来分隔字符串变量。echo效率比print高总结: echo命令和print命令相同,没有区别 echo()和print()有区别: echo()没有返回值,与echo命令相同 print()有返回值,总是返回1
补充: printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
answer: print is a function,echo is a language construct
说明:
使用strtotime可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
输出 10
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。 一个 regular variable 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
<?php header("Content-Type:text/html;charset=utf-8"); /** * 反转utf8编码的中文字符串 * @param string $str * @return string */ function strrev_utf8($str) { return join("",array_reverse(preg_split("//u", $str))); } // 实例 $str = "悄悄是别离的笙箫"; echo strrev_utf8($str); ?>客户端 IP:$_SERVER["REMOTE_ADDR"] 服务器端 IP:$_SERVER["SERVER_ADDR"]
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__ 获取参数,使用$_SERVER["QUERY_STRING"]
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。 @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。 很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
A. users[]="john";B.arrayadd( users, "john"); C. array_push($users, "john"); D. $users ||= "john" ; 答案:BD
isset 检测一个变量是否设置 empty 检测是否为空 注意二者的区别,如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。 isset是检测变量是否设置/定义,empty是检测已定义的变量的值是否为空。
当前脚本名称:$_SERVER["PHP_SELF"]或者 SERVER["SCRIPTNAME"];链接到当前页面的前一页面的URL地址: _SERVER["HTTP_REFERER"]。
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。 assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。 asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。 ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
打开或者关闭错误报告,如: error_reporting(0); error_reporting(E_ALL & ~ E_NOTICE); error_reporting(E_ALL);
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024 其中: 1 对应 E_ERROR,2 对应 E_WARNING,4 对应 E_PARSE, 8 对应 E_NOTICE,16 对应 E_CORE_ERROR,32 对应 E_CORE_WARNING ,64 对应 E_COMPILE_ERROR,128对应 E_COMPILE_WARNING,256 对应 E_USER_ERROR, 512 对应 E_USER_WARNING,1024 对应 E_USER_NOTICE。 error_reporting(2047)意味着上述错误都会显示出来。
写出以下程序的输出结果 (CBSI)
<?php $str = 'cd'; $$str = 'hotdog';//$cd = 'hotdog'; $$str .= 'ok';//$cd .= 'ok'; echo $cd; ?>hotdogok
获取一个普通变量的值作为这个可变变量的变量名。
定义常量:define() 检测常量是否定义:defined() 如:
define("TEST","happy new year!"); if( defined("TEST")){ echo TEST; } 执行程序段<?php echo 8%(-2) ?>将输出 %为取模运算,输出 0 $a % $b其结果的正负取决于 $a 的符号。echo ((-8)%3)."<br />";//输出 -2 echo (8%(-3))."<br />";//输出 2
arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用 report All errors and warnings,见 21 题中相关题目。
LoadModule php5_module "c:/php/php5apache2.dll"; AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
输出 1 count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。 对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
answer: 1
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。 PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。 PHP 脚本主要用于以下三个领域:
服务端脚本。这是 PHP 最传统,也是最主要的目标领域。命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。编写桌面应用程序。你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo: echo "My string $variable"; 你也可以使用这种方法:
echo <<<END This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of itsown, and can't contain any extra white space. END;输出结果为 4
$arr = array('james', 'tom', 'symfony');请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。 打印第一个元素:echo $arr[0]; 以’,’合并成字符串:echo implode(',',$arr);echo $a{0} 或 echo $a[0]
值是 e
=== 表示全等,是指的两个变量的值和类型都相等。 如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
A. printf("%.2d\n", 42); B. printf("%1.2f\n", 42); C. printf("%1.2u\n", 42); answer:B
answer:C 分析:
<?php $text = 'Content-Type:text/xml'; print substr($text, strchr($text,':'));//出错,strchr返回的是字符串 echo "<br />"; print substr($text, strchr($text,':')+1);//strchr返回的是字符串,字符串+1,返回ontent-Type:text/xml echo "<br />"; print substr($text, strpos($text,':')+1);//返回text/xml echo "<br />"; print substr($text, strpos($text,':')+2);//返回ext/xml echo "<br />"; print substr($text, 0,strchr($text,':'));//出错,strchr返回的是字符串 echo "<br />"; ?>A. True B. False answer:A
answer: NULL
A. Using the strpos function B. Using the == operator C. Using strcasecmp() D. Using strcmp() answer:C
answer:hello
answer:1
answer:ture
使用 intval 函数,echo intval("09"),或者使用 int 强制类型转换。
A. array_flip() B. array_reverse() C. sort() D. rsort() 答案:BD
array(2,5,7) max 用法示例如下:
<?php echo max(1,3,5,6,7);//7 echo "<br />"; echo max(array(2,4,5));//5 echo "<br />"; echo max(0,'hello');//0 echo "<br />"; echo max('hello','0');//hello echo "<br />"; echo max(-1,'hello');//hello echo "<br />"; //对于多个数组,max从左向右比较 //因此在本例中:2 == 2,但是4 < 5 $val = max(array(2,4,8),array(2,5,7));//array(2,5,7) var_dump($val); echo "<br />"; // 如果同时给出数组和非数组作为参数,则总是将数组视为最大值返回 $val = max('string', array(2, 5, 7), 42); var_dump($val); ?>define("MYPI",3.14);
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
date_default_timezone_set('PRC'); echo date("Y-m-d H:i:s",time());
GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。
print_r $val = 333;// error,print_r 是一个函数,需加上括号,如果是 print 则可以 print_r($val = 333); // 正确 $a += ($b = 4) + 5;// notice, a未定义,但可以正确运行‘ foo[bar] = 'enemy';// notice,最好 bar 加上引号function x($a = "1", $b){}`// 无,但给参数默认值应尽量从右向左
aaaa
501
分析: 在 PHP 中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用 global 显式声明使用全局变量或直接用$_GLOBALS 来引用。
52
12
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
// 注释内容 C 风格的单行注释 # 注释内容 unix 风格的单行注释 /* 注释内容 */ C 风格的多行注释
global $a 或者 $GLOBALS['a']
aa is 'aa'
break 和 continue 可以用在 switch 语句中,或是循环结构中 它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而 continue 则表示跳出本次循环,继续下一次的循环,不会终止循环。
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
array --声明一个数组 count -- 计算数组中的单元数目或对象中的属性个数 foreach -- 遍历数组 list -- 将数组中元素的值赋值给变量,批量声明变量 explode -- 将字符串转成数组 implode -- 将数组转成一个新字符串 array_merge -- 合并一个或多个数组 is_array -- 检查是否是数组 print_r -- 输出数组 sort -- 数组排序 array_keys -- 返回数组中所有的键名 array_values -- 返回数组中所有的值 key -- 从关联数组中取得键名
trim()-- 去除字符串首尾处的空白字符(或者其他字符) strlen()-- 字符串长度 substr()-- 截取字符串 str_replace()-- 替换字符串函数 strstr()-- 查找字符串的首次出现位置,返回 第一次出现的位置开始到结尾的字符串 explode()-- 将字符串分割成数组 implode()-- 将数组分割成字符串 str_repeat() -- 重复一个字符串 addslashes() -- 转义字符串 htmlspecialchars() -- HTML 实体转义
A. a B. false C. true D. b E. c 答案:B mixed array_rand( array $input [, int $num_req ] ) 从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。 所以使用 array_rand 函数,返回结果要么是键名,要么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
A. 1 B. 2 C. 3 D. 4 E. 5 答案:B
A. 不区分 B. 区分 答案:A 函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。
A. null B. true C. false D. 1 答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。 在下列情况下一个变量被认为是 NULL:
被赋值为 NULL尚未被赋值unset()$_ENV; $_SERVER; $_REQUEST; $_FILES; $_SESSION; $_COOKIE; $_GET; $_POST; $GLOBALS;
使用 in_array 函数,代码如下:
<?php $a = array( array('id' => 0), array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 500) ); $b = array('id' => 500); if (in_array($b,$a)) { echo "Yes"; }else{ echo "No"; } ?>使用 array_merge()函数
a为false, b = $c = 0