DTD (文書型定義) は、HTML 文書の形式が正しいことを確認するために有効な方法です。 Web ページを解析すると、ブラウザは DTD を使用してページの有効性 (仕様に準拠しているかどうか、要素とタグが正しく使用されているかどうか) をチェックし、適切なアクションを実行します。また、ブラウザのレンダリング モード (作業モード) にも影響します。
2. 以下のコードの表示結果を正確に指摘してください (クールニュース)
<style> a{ position:relative; height:200px; width:500px; border:solid 1px #000; background:#FFF; } #b,#c{position:absolute; width:250px; height:90px;} #b{top:30px; left:50px; background:#FF0000; z-index:1;} #c{bottom:30px; right:50px; background:#0000FF;}</style><div class="a"> <div id="b"></div> <div id="c"></div></div>
3. 以下のコードの表示結果を指摘してください (クールニュース)
<table border=1 width=500 style="text-align:center;"> <tr> <td rowspan=2 width=50% height=50>a</td> <td width=50% eight=25>d</td> </tr> <tr><td width=50% height=25>b</td></tr> <tr height=25><td colspan=2>c</td></tr></table>
4.数字を使って数字を生成する方法 リスト記号のリスト? ( )
A.
C.
D. {装飾: 下線なし}
答え: A
次の XHTML コード スニペットは W3C 仕様に準拠していません。エラーはいくつありますか?
<div id="newsmore"> <ul> <li><img src="0967_ohmyrabbit.jpg"></li> <li>印度总理辛格访华专题</li> <li> <ul id="newsmore"> <li>专访辛格:早日解决边界问题是战略目标</li> <li>辛格称北京奥运将为印度举办赛事提供灵感</li> <li>印度总理辛格访华参观北京奥运场馆建设</li> </ul> </li> </ul></div>
(4)。すべてのタグには対応する終了タグが必要です
(5)。XHTML では、すべての属性に値が必要です。値がない場合は、それが繰り返されます 8. div、span、および p タグの違いは何ですか (YG) )
セマンティックの観点から: div タグとspan タグは、それらに含まれる要素にとっては無意味であるため、通常はレイアウトに div と span が使用されます。 ; p タグは、段落を表す意味タグです。
表示の観点から見ると、span はインラインであり、前後に行のない小さなインライン HTML で使用されます。div 要素はブロックレベルであり、その前後の改行と同等です。レベル はい、前後で改行され、さらに別の行が分離されます。これは 2 つの行を分割することに相当します。
9. CSS (YG) のクラスと ID の違い
id: 各ページ ID は一意であり、繰り返すことはできません。
10. いくつかのメタ要素を挙げてください (YG)
<meta name="keywords" content=""> //向搜索引擎说明你的网页的关键词<meta name="description" content=""> //告诉搜索引擎你的站点的主要内容<meta name="author" content="你的姓名"> //告诉搜索引擎你的站点的制作的作者<meta http-equiv="Content-Type" content="text/html";charset=utf-8"> //指定字符集<meta http-equiv="refresh" content="n;url="> //定时让网页在指定的时间 n 内跳转<meta http-equiv="expires" content="Mon,12 May 2001 00:20:00 GMT"> //可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用 GMT 时间格式<meta http-equiv="pragma" content="no-cache"> //禁用缓存<meta http-equiv="set-cookie" content="Mon,12 May 2001 00:20:00 GMT"> //cookie 设定,如果网页过期,存盘的 cookie 将被删除。需要注意的也是必须使用 GMT 时间格式
は、ブラウザー独自の方法でコードを解析し、実行します。そのため、これを変なモードと呼びます。
ブラウザーが解析時に標準モードを使用するか変なモードを使用するかは、Web ページの DTD 宣言に直接関係しており、DTD 宣言は標準ドキュメントのタイプ (標準モード解析) ドキュメント タイプを定義します。これにより、ブラウザーは Web をロードします。 DTD 宣言を無視すると、Web ページが quirks モードになるようです。
12. フレームワークのタグを実装し、サンプルを使用します (YG)
<frameset cols="25%,50%,25%"> <frame src="frame_a.htm" /> <frame src="frame_b.htm" /> <frame src="frame_c.htm" /></frameset>
获取 name 为 formName 的表单并将该表单数据提交到服务器。但这行代码是不能运行的,有两处错误,一是通过表单名称来获取表单得到时候,应该写成document.forms[‘formName’],提交表单事件使用submit 方法,需要加上括号,下面给出简单的示例代码:
<form action="a.php" meathod="post" name="login" id="f1"> 用户名:<input type="text" name="username"/> <input type="button" id="btn" value="提交"/></form><script type="text/javascript"> document.getElementById("btn").onclick=function () { if (document.forms['login'].username.value != '') { document.forms['login'].submit(); } }</script>
<input id="txt" type="text" value="baidu"/><script type="text/javascript"> var textBox = document.getElementById('txt'); textBox.onmouseover = function(){ this.select(); }</script>
主窗口:
<a href="" id="a1" target="new">新窗口</a><div id="msg"></div><script type="text/javascript"> var a1 = document.getElementById('a1'); a1.onclick = function () { window.open('new.html','new','location=no,toolbar=no'); return false; }</script>
弹出窗口:
<input type="text" name="message" id="m1"/><br /><input type="button"value="关闭" id="btn"/><br /><script type="text/javascript"> var btn = document.getElementById('btn'); var message = document.getElementById('m1'); btn.onclick = function(){ var div = window.opener.document.getElementById('msg'); div.innerHTML = message.value; window.close(); }</script>
使用 XMLHttpRequest 对象异步请求
7. 判断以下代码是否正确,如果有错,请指出错误,如果正确,请指出运行结果 (酷讯)var arr = new Array( new Array(1,2,3,4), new Array("abc", "def", "xyz"),);for(i = 0; i < arr.length; i++) { document.write(arr[0]);}
怀疑这个代码写错了,第二个 new array 后面的逗号是多余的,如果此处没问题,则代码是正确的,输出的结果是 1,2,3,4 1,2,3,4
注:arr 是一个二维数组,该数组有两个元素,第一个元素是数组[1,2,3,4],第二个元素也是一个数组为["abc", "def", "xyz"],for 循环语句执行了两次,但都是输出第一个元素,即数组[1,2,3,4]。
<script type="text/javascript">function array_unique(arr){ var result = arr; for (var i = 0; i < arr.length; i++) { for (var j = 0; i < arr.length; j++) { temp = arr[i]; // 如果当前元素与后面某一个元素相等,则移除顶元素 if ((i+j+1) < arr.length && temp === arr[i+j+1]) { result.splice(i+j+1,1); } } } return result;}var a = [4,7,8,5,8,6,43,7,0,false,'',{}];var b = array_unique(a);alert(b);//4,5,8,5,6,43,0,false,[object Object]</script>
A. var obj = ( );
B. var obj = [ ];
C. var obj = { };
D. var obj = //;
答案:A
A. null instanceof Object
B. null === undefined
C. null == undefined
D. NaN == NaN
答案:C
A. foo.att
B. foo("att")
C. foo["att"]
D. foo{"att"}
E. foo["a"+"t"+"t"]
答案:ACE
(1).直接作为元素的属性,如
(2).使用 DOM 0 级事件,简单,兼容性好,如 img.onclick = function(){}
(3).使用 DOM 2 级事件,功能更强大,在非 IE 等标准浏览其中,使用 addEventListener,在IE 浏览器中则使用 attachEvent 来实现。
JavaScript 不支持二维数组定义,可以用 arr[0] = new array()来解决。
14. 假设 a.html 和 b.html 在同一个文件夹下面,用 JavaScript 实现当打开 a.html 五秒钟后,自动跳转到 b.html。<script type="text/javascript"> function go2b() { window.location.href = "b.html"; window.close(); } setTimeout("go2b()",5000);//5秒后自动执行go2b方法</script>
(1). var img = new Image();
(2).var img = document.createElement("image")
(3). img.innerHTML = ""
前进: history.forward();或者 history.go(1);
后退: history.back ();或者history.go(-1);
<script type="text/javascript"> var div = document.createElement("div"); var a = document.createElement("a"); a.href = "http://www.baidu.com"; var span = document.createElement("span"); span.innerHTML = "百度"; a.appendChild(span); div.appendChild(a); document.body.appendChild(div);</script>
结果 HTML:
document.getElementById( 'button' ).onclick = function(){window.open ('page.html');}
其中,button 是按钮的 id,page.html 是要弹出的窗口页面。
19. JavaScript 包括那些基本数据类型?(小米)JavaScript 中包括 5 种基本数据类型,分别是 Number,String,Boolean,Null 和 Undefined。
strlen和mb_strlen都是用于获取字符串长度。
strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码,如 gbk 和 utf-8,使用 strlen 得到是该字符的总字节数;
可以使用mb_strlen获取其字符个数,使用mb_strlen 要注意两点,一是要开启 mbstring 扩展,二是要指定字符集。
总结:
示例:
<?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
<?php /* 写出下列程序的输出结果(新浪网技术部) */ $x = 87; $y = ($x % 7) * 16; $z = $x > $y ? 1 : 0; echo $z;?>
答案:1
4. 写出下列几个预定义全局变量的作用 (新浪网技术部)$_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录$_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称$_FILES //包含有所有上传的文件信息S_FILES['userfile']['name']//客户端机器文件的原名称$_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。$_FILES['userfile']['size']//已上传文件的大小,单位为字节$_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名$_FILES['userfile']['error']//和该文件上传相关的错误代码
二者区别只有一个,那就是对包含文件的需求程度。include 就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。而 require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
别是_;为了避免多次包含同一文件,可以用语句来代替它们。
在如何处理失败时,include()产生一个警告而require()则导致一个致命错误;requireonce()/include_once()
include、require
6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题)<?php /* 6. 用最少的代码写一个求 3 值最大值的函数. (51.com 笔试题) */ // 定义函数 function maxnum($a,$b,$c) { return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c); } // 调用实例 echo maxnum(24,15,8);?>
POST 根据你 php.ini 文件配置(默认是 8M)
GET 的话大小限制在 2KB
get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。
8. 有三个 php 文件位于同一目录下,内容如下所示。使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果 ,如果不存在问题,请写出浏览器查看效果(酷讯 PHP 工程师笔试题)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 避免重复包含。
9. echo(),print(),print_r()的区别?(新浪)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命令和print命令相同,没有区别
echo()和print()有区别:
echo()没有返回值,与echo命令相同
print()有返回值,总是返回1
补充:
printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
answer: print is a function,echo is a language construct
10. 用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。<?php /* 用 PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。 */ // ================方法一================== echo date("Y-m-d H:i:s",time() - 3600*24); echo "<br />"; // ================方法二================== echo date("Y-m-d H:i:s",strtotime("-1 day")); echo "<br />"; // 将表单中提交的时间字符串"2015-6-23"转成时间戳 $date = strtotime("2015-6-23"); echo $date;?>
说明:
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
11. 不使用第三个变量交换两个变量的值<?php /* 不使用第三个变量交换两个变量的值 */ // ================方法一================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; list($a,$b) = array($b,$a); echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; echo "<hr />"; // ================方法二================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; $a = $a.'&'.$b;//使用&连接两个字符串 // 根据&进行字符串分割 $b = explode('&', $a); $a = $b[1]; $b = $b[0]; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />';?>
<?php $num = 10; function multipy($num){ $num = $num +10; } multipy($num); echo $num;?>
输出 10
相关题目 2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个 regular variable 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
<?php $str ='1234567890'; function str($str) { // 反转字符串,得到0987654321 $str = strrev($str); // 使用逗号分割字符串,得到098,765,432,1, $str = chunk_split($str,3,','); // 再次反转字符串,得到,1,234,567,890 $str = strrev($str); // 去掉左边的",",得到1,234,567,890 $str = ltrim($str,','); return $str; } echo str($str);?>
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);?>
<?php $str = "www.baidu.com"; echo strrev(str_replace('www','',$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. array_add($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["SCRIPT_NAME"];
链接到当前页面的前一页面的 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
获取一个普通变量的值作为这个可变变量的变量名。
23. 常量如何定义? 如何检测一个常量是否被定义?定义常量:define()
检测常量是否定义:defined()
如:
define("TEST","happy new year!");if( defined("TEST")){ echo TEST;}
echo ((-8)%3)."
";//输出 -2
echo (8%(-3))."
";//输出 2
AddType application/x-httpd-php .php
27. 一个函数的参数不能是对变量的引用,除非在 php.ini 中把___设为 on.输出 1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
<?php echo count(strlen("http://php.net"));?>
answer: 1
30. 写个函数用来对二维数组排序(新浪)<?php /** * 根据某列对二维数组进行排序 * @param $arr array 要排序的二维数组 * @param $row string 排序依据的某列 * @param $type string asc表示正序,为默认值;desc表示逆序 * @param array 返回排序后的二维数组 */ function array_sort($arr,$row,$type ='asc') { $arr_temp = array(); // 将排序依据作为数组的键名 foreach ($arr as $v) { $arr_temp[$v[$row]] = $v; } // print_r($arr_temp); // 按照键名对二维数组进行排序,并保持索引关系 if ($type == 'asc') { ksort($arr_temp); } elseif($type == 'desc') { krsort($arr_temp); } // 返回排序结果 return $arr_temp; } // 实例 $person = array( array('id'=>2,'name'=>'zhangsan','age'=>23), array('id'=>5,'name'=>'lisi','age'=>28), array('id'=>3,'name'=>'apple','age'=>17) ); echo "<pre class="brush:php;toolbar:false">before:<br />"; print_r($person); echo ""; echo "
after:<br />"; print_r($person2); echo "";?>
<?php /* 写 5 个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数。(新浪) */ // 方法一 function ext_name1($path){ $path_info = strrchr($path, '.');//.php return ltrim($path_info,'.'); } // 方法二 function ext_name2($path){ $path_info = substr($path,strrpos($path, '.')); return ltrim($path_info,'.'); } // 方法三 function ext_name3($path){ $path_info = pathinfo($path); return $path_info['extension']; } // 方法四 function ext_name4($path){ $arr = explode('.', $path); return $arr[count($arr)-1]; } // 方法五 function ext_name5($path){ $pattern = '/^[^\.]+\.([\w]+)$/'; return preg_replace($pattern, '${1}', basename($path)); } // 实例 $path = str_replace('\\', '/', __FILE__); echo "$path<br />"; echo ext_name1($path);echo "<br />"; echo ext_name2($path);echo "<br />"; echo ext_name3($path);echo "<br />"; echo ext_name4($path);echo "<br />"; echo ext_name5($path);echo "<br />";?>
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";
你也可以使用这种方法:
echo <<<ENDThis text is written to the screen as output and this $variable is parsed too. If you wanted youcan 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;
<?php $b = 201; $c = 40; $a = $b > $c ? 4 : 5; echo $a;?>
输出结果为 4
echo $a{0} 或 echo $a[0]
相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)值是 e
37. What does === do? What's an example of something that will give true for '==', but not'==='? (Yahoo)=== 表示全等,是指的两个变量的值和类型都相等。
如 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
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
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 />";?>
<?php $a = in_array('01',array('1')) == var_dump('01' == 1);?>
A. True
B. False
answer:A
<?php function timesTwo($int) { $int = $int * 2; } $int = 2; $result = timesTwo($int);?>
answer: NULL
42. What is the best all-purpose way of comparing two strings? (腾讯)A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()
answer:C
<?php /* 运行以下程序,$a 的值是多少? */ $a = "hello"; $b = &$a; unset($b); $b = "world"; echo $a,$b;?>
answer:hello
44. 运行以下程序,$b 的值是多少?<?php /* 运行以下程序,$b的值是多少? */ $a = 1; $b = $a++; echo $a,$b;?>
answer:1
45. 运行以下程序,$x 的值是多少?<?php /* 运行以下程序,$x 的值是多少? */ $array = array(); $x = empty($array); echo $x ? "true":"false";?>
answer:ture
46. 将字符 09 转换成十进制数字。(百度)使用 intval 函数,echo intval("09"),或者使用 int 强制类型转换。
47. 请 写 一 个 函 数 , 实 现 以 下 功 能 : 字 符 串 "open_door" 转 换 成 "OpenDoor" 、"make_by_id" 转换成 "MakeById"。<?php /** * 字符串转换,如open_door->OpenDoor,make_by_id->MakeById * @param $str string 要转换的字符串 * @return string 转换后的字符串 */ function change_str($str){ $arr = explode('_',$str);//将以“_”间隔的字符串拆分成数组的单元 $arr = array_map('ucfirst', $arr);//每个数组单元的首个字符大写 return implode('', $arr);//将数组单元合并输出字符串 } // 实例 $str1 = 'open_door'; $str2 = 'make_by_id'; echo change_str($str1);//OpenDoor echo change_str($str2);//MakeById?>
<?php $arr1 = array( '0' => array('fid' => 1,'tid' =>1,'name' => 'Name1'), '1' => array('fid' => 1,'tid' =>2,'name' => 'Name2'), '2' => array('fid' => 1,'tid' =>5,'name' => 'Name3'), '3' => array('fid' => 1,'tid' =>7,'name' => 'Name4'), '4' => array('fid' => 3,'tid' =>9,'name' => 'Name5') ); // ======================================================= $arr_tmp = array(); $arr2 = array(); foreach ($arr1 as $v) { // 方法一 $arr_tmp[$v['fid']][] = array_slice($v, 1); // 方法二 /* $arr_tmp[$v['fid']][] = array( 'tid' => $v['tid'], 'name' => $v['name'] ) */ } foreach ($arr_tmp as $v) { $arr2[] = $v; } print_r($arr1); print_r($arr2);?>
<?php $array = array ('a', 'b', 'c', 'd');?>
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);
52. 简述单引号和双引号的用法双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
53. Switch 完整语法和注意事项使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
54. 用 PHP 编写代码在页面输出当前的北京时间,格式为 “2007-01-18 09:22:03”date_default_timezone_set('PRC');
echo date("Y-m-d H:i:s",time());
GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。
56. 计算某段字符串中某个字符出现的次数(例如 : gdfgfdgd59gmkblg 中 g 的次数)$text = 'gdfgfdgd59gmkblg';echo substr_count ( $text,'g');
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){}// 无,但给参数默认值应尽量从右向左
<?php header("Content-type:text/html;charset=utf-8"); $str1 = null; $str2 = false; echo $str1 == $str2 ? '相等' : '不相等';//相等 $str3 = ''; $str4 = 0; echo $str3 == $str4 ? '相等' : '不相等';//相等 $str5 = 0; $str6 = '0'; echo $str1 === $str2 ? '相等' : '不相等';//相等 ?>
<?php $a1 = null; $a2 = false; $a3 = 0; $a4 = ''; $a5 = '0'; $a6 = 'null'; $a7 = array(); $a8 = array(array()); echo empty($a1) ? 'true' : 'false';//ture echo '<br />'; echo empty($a2) ? 'true' : 'false';//ture echo '<br />'; echo empty($a3) ? 'true' : 'false';//ture echo '<br />'; echo empty($a4) ? 'true' : 'false';//ture echo '<br />'; echo empty($a5) ? 'true' : 'false';//ture echo '<br />'; echo empty($a6) ? 'true' : 'false';//false echo '<br />'; echo empty($a7) ? 'true' : 'false';//ture echo '<br />'; echo empty($a8) ? 'true' : 'false';//false?>
<?php $test = 'aaaa'; $abc = &$test; unset($test); echo $abc;?>
aaaa
61. 写出如下程序的输出结果<?php $count = 5; function get_count() { static $count = 0; return $count++; } echo $count;//5 ++$count;//6 echo get_count();//0 echo get_count();//1 ?>
501
分析:
在 PHP 中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用 global 显式声明使用全局变量或直接用$_GLOBALS 来引用。
<?php $GLOBALS['var1'] = 5; $var2 = 1; function get_value() { global $var2; $var1 = 0; return $var2++; } get_value(); echo $var1;//5 echo $var2;//2?>
52
63. 写出如下程序的输出结果<?php function get_arr() { unset($arr[0]); } $arr1 = array(1,2); $arr2 = array(1,2); get_arr(&$arr1); get_arr($arr2); echo count($arr1);//1 echo count($arr2);//2 ?>
12
64. $arr = array('james', 'tom', 'symfony'); 请将’jack’添加到$arr 数组的开头,并把 jack 打印出来。array_unshift($arr,’jack’);echo $arr[0];
echo implode(‘,’,$arr);
66. $str = ‘jack,james,tom,symfony’; 请将$str 用’,’分割,并把分割后的值放到$arr 数组中?$arr = explode(‘,’,$str);
67. $arr = array(3,7,2,1,’d’,’abc’);请将$arr 按照从大到小的顺序排序,并保持其键值不变?arsort($arr);print_r($arr);
echo strstr($mail,'163');echo substr($mail,7);echo substr($mail, strpos($mail, '@')+1);$arr = explode("@",$mail);echo $arr[1];
// 注释内容 C 风格的单行注释
# 注释内容 unix 风格的单行注释
/* 注释内容 */ C 风格的多行注释
global $a 或者 $GLOBALS['a']
71. 若$aa='aa';则 print('aa is \'aa\''."aa is 'aa'
72. 如何把$a = ‘123’转化成 123,列出两种方式?<?php $a = '123'; $a = (int)$a; //第一种方式 $a = intval($a); //第二种方式 settype($a,'int'); //第三种方式 ?>
break 和 continue 可以用在 switch 语句中,或是循环结构中
它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而 continue 则表示跳出本次循环,继续下一次的循环,不会终止循环。
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
75. 如何往一个数组后面添加一个值?列出两种方式?$arr[ ] = $value;array_push($arr, $value);
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 实体转义
<?php $srcArray=array('a','b','c','d'); $randValue=array_rand($srcArray); $result=is_string($randValue);?>
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 函数,返回结果要么是键名,要么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
<?php $a= '01'; $result = 1; if (in_array($a,array('1'))) { $result = 2; }elseif ($a == '1') { $result = 3; }elseif ($a == '01') { $result = 4; }else{ $result = 5; } echo $result;?>
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不区分
B. 区分
答案:A
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。
<?php $x = ''; $result = is_null($x);?>
A. null
B. true
C. false
D. 1
答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
<?php function reverse($str) { $arr = explode(' ',$str); $arr = array_reverse($arr); return implode(' ',$arr); } $str = 'This is PHP'; echo reverse($str);?>
$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()函数
86. 运行以上代码后$a $b $c 分别是? (卓望)<?php $a = $b = $c = 0; $a = $b && $c;?>
$a 为 false,$b = $c = 0
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
private protected public
2. 设计模式考察:请用单态设计模式方法设计类满足如下需求:请用 PHP5 代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)
<?php class Mysql { private static $instance = null; private $conn; // 构造方法,设置为private,不允许通过new获得对象实例 private function __construct(argument) { $conn = mysql_connect("localhost","root","root"); } // 获取实例方法 public function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } // 禁止克隆 private function __clone(){} } // 获得对象 $db = Mysql::getInstance();?>
<?php class a { protected $c; public function a() { $this->c = 10; } } class b extends a { public function print_data() { return $this->c; } } $b = new b(); echo $b->print_data();?>
输出结果 10
[!]4. PHP5 中魔术方法函数有哪几个,请举例说明各自的用法 (腾讯 PHP 工程师笔试题)__sleep serialize 之前被调用
__wakeup unserialize 时被调用
__toString 打印一个对象时被调用
__set_state 调用 var_export 时被调用,用__set_state的返回值作为 var_export 的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set 函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset 一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
构造函数:__construct
析构函数:__destruct
<?php class test{ function Get_test($num){ $num = md5(md5($num)."En"); return $num; } } $testObject = new test(); $encryption = $testObject->Get_test("itcast"); echo $encryption;?>
双重 md5 加密
6. How would you declare a class named “myclass” with no methods or properties?(Yahoo)class myclass{};
相关题目:如何声明一个名为“myclass”的没有方法和属性的类? 7. How would you create an object, which is an instance of “myclass”? (Yahoo)$obj= new myclass();
相关题目:如何实例化一个名为“myclass”的对象? 8. How do you access and set properties of a class from within the class?(Yahoo)使用语句:$this->propertyName,例如:
<?php class mycalss{ private $propertyName; public function __construct() { $this->propertyName = "value"; } }?>
<?phpclass Foo{?><?php function bar(){ print "bar"; }}?>
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
<?phpcla