ホームページ  >  記事  >  バックエンド開発  >  PHP面接の質問:PHP言語の基礎(基礎編)

PHP面接の質問:PHP言語の基礎(基礎編)

WBOY
WBOYオリジナル
2016-06-23 13:32:022488ブラウズ

3. PHP 言語の基礎

1. strlen() と mb_strlen() の関数とは (新浪技術部)

strlen と mb_strlen は両方とも文字列の長さを取得するために使用されます。
strlen は、シングルバイトのエンコードされた文字のみを対象とします。つまり、文字列の合計バイト数を計算します。 gbk や utf-8 などのマルチバイト エンコーディングの場合は、strlen を使用して文字の総バイト数を取得します。
mb_strlen を使用して文字数を取得できます。使用する際の注意点は 2 つあります。 mb_strlen。1 つは mbstring 拡張機能を有効にすることです。2 つ目は文字セットを指定することです。

概要:

  • 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),多字节编码?>
    関連トピック 1: 中国語のテキスト文字列を文字化けせずにインターセプトする方法。

    方法 1、PHP 組み込み関数 mb_substr() を使用します
    方法 2、次のように 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);//输出 我的温暖?>
    関連する質問 2: 文字列 " 内の文字数を確認する方法China 2Beijing 333Beijing" (漢字 1 文字) を検索し、4 番目の文字 "North" を見つけます

    方法 1、PHP 組み込み関数を使用し、設定で mbstring 拡張機能がオンになっていることを確認します
    方法 2、カスタム関数を実装して検索します2. 文字列を配列に分割するために正規表現を使用する関数は次のどれですか ()、split

    B、explode

    、C. join
    D。
    3. 次のプログラムの出力を書き込みます (新浪技術部)

    <?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);//输出 北?>

    答え: 1
    4. 以下の事前定義されたグローバル変数の関数を書き込みます (新浪技術部)
    <?php	/*		写出下列程序的输出结果(新浪网技术部)	*/	$x = 87;	$y = ($x % 7) * 16;	$z = $x > $y ? 1 : 0;	echo $z;?>
    5. include と require はどちらも別のファイルをインクルードできます。現在のファイルとの違いは何ですか? Include と include_once の違いは何ですか? (新浪技術部)

    この 2 つの違いは 1 つだけあり、それは含まれるファイルの需要の度合いです。 include はインクルードすることを意味します。インクルードされたファイルが存在しない場合は、エラーが表示されますが、プログラムは実行を続けます。 require は必須を意味します。インクルードされたファイルが存在しない場合、または開くことができない場合は、エラーが表示され、プログラムの実行が終了します。

    2 つの構造は、障害の処理方法を除いてまったく同じです。

    once は 1 回を意味し、include_once と require_once は繰り返し含めることを避けるために 1 回だけ含めることを意味します。

    関連する質問 1: include と include_once の違いは何ですか? (Yahoo) 関連する質問 2: include と require はどちらも現在のファイルに別のファイルを含めることができますが、その違いは _
    ;同じファイルを複数回使用する場合は、ステートメント
    に置き換えることができます。

    失敗の処理方法では、include() は警告を生成し、require() は致命的なエラーを引き起こします。 (Yahoo)

    include, require 6. 3 つの値の最大値を求める関数を作成する (51.com の筆記試験問題)

    $_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']//和该文件上传相关的错误代码
    7. POST と GET の送信の最大容量を簡単に説明します。 51.com の筆記試験問題) POST は php.ini ファイル構成に基づいています (デフォルトは 8M)
    GET のサイズは 2KB に制限されています

    関連する質問: フォームの get 送信メソッドと post 送信メソッドの違いは何ですか?

    get はリクエストを送信することです。受信するには HTTP プロトコルが url パラメーターを介して渡されます。post はエンティティ データですが、フォームを通じて大量の情報を送信できます。

    8. 同じディレクトリに 3 つの php ファイルがあり、内容は次のとおりです。ブラウザを使用して c.php にアクセスし、問題があるかどうかを確認します。問題があれば修正方法を明記し、問題がなければブラウザ閲覧効果を書いてください(Kuxun PHPエンジニア筆記試験問題)

    A.php:

    <?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);?>

    B。 php:

    <?php    function fa(){        echo "in Function A\n";    }?>

    C.php:

    <?php    include 'a.php';    function fb() {    	fa();    	echo "in Function B\n";    }?>

    回答: a.php が 2 回インクルードされているため、fa() 関数が繰り返し定義されることを回避します。

    9. echo()、print()、print_r()の違いは何ですか? (Sina)

    echo、print は PHP ステートメント、print_r は関数、ステートメントには戻り値がありません、関数は戻り値を持つことができます (役に立たない場合でも)

    print は単純型変数の値のみを出力できます(int、string など)

    print_r は印刷できます 複合型変数 (配列、オブジェクトなど) の値を出力します

    echo -- 1 つ以上の文字列を出力します

    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 />';//使用逗号时报错。?>

    说明:

    1. ,是 echo 本身支持的一种语法,而.则是字符串连接操作符,使用,的效率要高一些。(少了连接运算)
    2. echo可以使用,来分隔字符串变量,也可以使用,来分隔字符串变量;print只能使用.来分隔字符串变量。
    3. echo效率比print高

    总结
    echo命令和print命令相同,没有区别
    echo()和print()有区别:
    echo()没有返回值,与echo命令相同
    print()有返回值,总是返回1

    补充:
    printf()和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量

    相关题目:What is the difference between "print()" and "echo( )"? (腾讯)

    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可以将任何字符串的时间表示(now,seconds,day,week等)转换成时间戳,仅针对英文。
  • 在实际开发的时候,strtotime非常有用,因为对于表单来说,提交的数据都是字符串。比如,“2013-4-27”需要将其转换成时间戳然后存到数据库中。
  • 相关题目:求两个日期的差数,例如 2009-3-1 ~ 2009-4-4 的日期差数

    (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 />';?>
    1. 请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?
      变量默认总是传值赋值。
      那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
      PHP 也提供了另外一种方式给变量赋值:引用赋值。
      这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)。
      对象默认是传引用。
      对于较大的数据,传引用比较好,这样可以节省内存的开销。
    相关题目 1:What would the following code print to the browser? Why?
    <?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 传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。

    13. 将 1234567890 转换成 1,234,567,890 每 3 位用逗号隔开的形式。(百度)
    <?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);?>
    相关题目 1:如何实现字符串翻转?

    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);?>
    相关题目 2:假设现在有一个字符串 www.baidu.com 如何使用 PHP 对它进行操作使字符串以 moc.udiab.输出? (亿邮)
    <?php	$str = "www.baidu.com";	echo strrev(str_replace('www','',$str));?>
    14. 用 PHP 写出显示客户端 IP 与服务器 IP 的代码。

    客户端 IP:$_SERVER["REMOTE_ADDR"]
    服务器端 IP:$_SERVER["SERVER_ADDR"]

    15. 简述如何得到当前执行脚本路径,包括所得到参数。

    获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"]或__FILE__
    获取参数,使用$_SERVER["QUERY_STRING"]

    16. What is the difference between foo() & @foo()?(Yahoo)

    foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
    @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
    很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。

    17. 下面哪个选项没有将 john 添加到 users 数组中? ( 百度 )

    A. $users[ ] = "john";
    B. array_add($users, "john");
    C. array_push($users, "john");
    D. $users ||= "john" ;
    答案:BD

    18. 检测一个变量是否有设置的函数?是否为空的函数是?

    isset 检测一个变量是否设置
    empty 检测是否为空
    注意二者的区别,如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
    isset是检测变量是否设置/定义,empty是检测已定义的变量的值是否为空。

    19. 在 PHP 中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面 URL 记录在预定义变量______中。

    当前脚本名称:$SERVER["PHP_SELF"]或者 $SERVER["SCRIPT_NAME"];
    链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。

    20. sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?

    sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
    assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
    asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
    ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。

    21. 在 PHP 中 error_reporting 这个函数有什么作用?

    打开或者关闭错误报告,如:
    error_reporting(0);
    error_reporting(E_ALL & ~ E_NOTICE);
    error_reporting(E_ALL);

    相关题目:error_reporting(2047) 什么作用?(新浪)

    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)意味着上述错误都会显示出来。

    1. 写出以下程序的输出结果 (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;}
    1. 执行程序段6fba1c470c54fed5050e42db7307b2f6将输出
      %为取模运算,输出 0
      $a % $b其结果的正负取决于 $a 的符号。

    echo ((-8)%3)."df250b2156c434f3390392d09b1c9563";//输出 -2
    echo (8%(-3))."df250b2156c434f3390392d09b1c9563";//输出 2

    25. 数组函数 arsort 的作用是_ ;语句 errorreporting(2047)的作用是__。
    arsort:对数组进行逆向排序并保持索引关系
    error_reporting(2047)的作用 report All errors and warnings,见 21 题中相关题目。 26. 以 Apache 模块的方式安装 PHP,在文件 http.conf 中首先要用语句_ 动态装载 PHP模块,然后再用语句使得 Apache 把所有扩展名为 php 的文件都作为 PHP 脚本处理。
    LoadModule php5module "c:/php/php5apache2.dll";

    AddType application/x-httpd-php .php

    27. 一个函数的参数不能是对变量的引用,除非在 php.ini 中把___设为 on.
    allowcall_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。 28. 在 PHP 中,heredoc 是一种特殊的字符串,它的结束标志必须____顶格写,并且不能包含任何其它字符除";" 29.echo count("abc"); 输出什么?(新浪?)

    输出 1
    count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
    对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
    如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。

    相关题目:What will be the output of the following PHP code:(腾讯)
    <?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 "
    "; $person2 = array_sort($person,'name'); echo "
    after:<br />";	print_r($person2);	echo "
    ";?> 31. 写 5 个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数。(新浪)
    <?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 />";?>
    32. PHP 的意思,它能干些什么?

    PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
    PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。
    PHP 脚本主要用于以下三个领域:

  • 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
  • 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
  • 编写桌面应用程序。
  • 33. Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)

    你可以使用 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;
    34. 写出以下程序的输出结果 (CBSI)
    <?php	$b = 201;	$c = 40;	$a = $b > $c ? 4 : 5;	echo $a;?>

    输出结果为 4

    1. $arr = array('james', 'tom', 'symfony');请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。
      打印第一个元素:echo $arr[0];
      以’,’合并成字符串:echo implode(',',$arr);
    36. $a = 'abcdef'; 请取出$a 的值并打印出第一个字母

    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)

    38. Which of the following snippets prints a representation of 42 with two decimal places?(腾讯)

    A. printf("%.2d\n", 42);
    B. printf("%1.2f\n", 42);
    C. printf("%1.2u\n", 42);
    answer:B

    39. Given $text = 'Content-TypeType:text/xml'; Which of the following prints 'text/xml'? (腾讯)

    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 />";?>
    40. What is the value of $a?
    <?php	$a = in_array('01',array('1')) == var_dump('01' == 1);?>

    A. True
    B. False
    answer:A

    41. What is the value of $result in the following PHP code? (腾讯)
    <?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

    43. 运行以下程序,$a 的值是多少?
    <?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?>
    48. 要求写一段程序,实现以下数组$arr1 转换成数组$arr2:
    <?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);?>
    49. 如何将一个数组元素的排列顺序反转过来(例如以下代码反转以后的顺序是: array ('d','c', 'b', 'a'))? (选择 2 个答案)
    <?php	$array = array ('a', 'b', 'c', 'd');?>

    A. array_flip()
    B. array_reverse()
    C. sort()
    D. rsort()
    答案:BD

    50. $val = max('string', array(2, 5, 7), 42);$val 值为

    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);?>
    51. 定义常量 MYPI=3.14_________________________;

    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());

    55. 简述 GBK、GB2312、BIG5 、GB18030

    GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。

    56. 计算某段字符串中某个字符出现的次数(例如 : gdfgfdgd59gmkblg 中 g 的次数)
    $text = 'gdfgfdgd59gmkblg';echo substr_count ( $text,'g');
    57. 以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)

    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){}// 无,但给参数默认值应尽量从右向左

    58. 写出如下程序的输出结果(小米)
    <?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 ? '相等' : '不相等';//相等 ?>
    59. 写出如下程序的输出结果
    <?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?>
    60. 写出如下程序的输出结果
    <?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 来引用。

    62. 写出如下程序的输出结果
    <?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];
    65. $arr = array('james', 'tom', 'symfony');请将$arr 数组的值用 ’,’分割并合并成字符串输出?

    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);
    68. $mail = “ gaofei at 163 dot com ”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
    echo strstr($mail,'163');echo substr($mail,7);echo substr($mail, strpos($mail, '@')+1);$arr = explode("@",$mail);echo $arr[1];
    69. PHP 中的注释的写法,要列出三种?

    // 注释内容 C 风格的单行注释
    # 注释内容 unix 风格的单行注释
    /* 注释内容 */ C 风格的多行注释

    70. 如何在一个 php 函数中使用具有全局属性的变量,说出两种方式?

    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');	//第三种方式 ?>
    相关题目:字符串怎么转成整数,有几种方法?怎么实现?
    1. 强制类型转换: (整型)字符串变量名;
    2. 直接转换:settype(字符串变量,整型);
    3. intval(字符串变量);
    73. 说说 break 和 continue 可以用在哪些语句里,并且列出二者的区别?

    break 和 continue 可以用在 switch 语句中,或是循环结构中
    它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而 continue 则表示跳出本次循环,继续下一次的循环,不会终止循环。

    74. 函数中的默认参数位置如何放置?

    当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。

    75. 如何往一个数组后面添加一个值?列出两种方式?
    $arr[ ] = $value;array_push($arr, $value);
    [!!!]76. 说出数组涉及到的常用函数。

    array --声明一个数组
    count -- 计算数组中的单元数目或对象中的属性个数
    foreach -- 遍历数组
    list -- 将数组中元素的值赋值给变量,批量声明变量
    explode -- 将字符串转成数组
    implode -- 将数组转成一个新字符串
    array_merge -- 合并一个或多个数组
    is_array -- 检查是否是数组
    print_r -- 输出数组
    sort -- 数组排序
    array_keys -- 返回数组中所有的键名
    array_values -- 返回数组中所有的值
    key -- 从关联数组中取得键名

    [!!!]77. 字符串的常用函数?

    trim()-- 去除字符串首尾处的空白字符(或者其他字符)
    strlen()-- 字符串长度
    substr()-- 截取字符串
    str_replace()-- 替换字符串函数
    strstr()-- 查找字符串的首次出现位置,返回 第一次出现的位置开始到结尾的字符串
    explode()-- 将字符串分割成数组
    implode()-- 将数组分割成字符串
    str_repeat() -- 重复一个字符串
    addslashes() -- 转义字符串
    htmlspecialchars() -- HTML 实体转义

    78. 以下代码的执行后是,$result 值为:(奇矩互动)
    <?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 函数,返回结果要么是键名,要么是数组,在这个例子中,数组是索引数组,所以返回的是整型。

    79. 以下代码的执行后是,$result 值为: (奇矩互动)
    <?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

    80. php 函数名是否区分大小写? (奇矩互动)

    A. 不区分
    B. 区分
    答案:A
    函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。

    81.以下代码的执行后是,$result 值为:(奇矩互动)
    <?php	$x = '';	$result = is_null($x);?>

    A. null
    B. true
    C. false
    D. 1
    答案:C

    is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
    在下列情况下一个变量被认为是 NULL:

    1. 被赋值为 NULL
    2. 尚未被赋值
    3. unset()
    82. 翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。如 :输入"This is PHP",输出"PHP is This"(非必要请不要使用 PHP 自带函数) (小米)
    <?php	function reverse($str)	{		$arr = explode(' ',$str);		$arr = array_reverse($arr);		return implode(' ',$arr);	}	$str = 'This is PHP';	echo reverse($str);?>
    83. 请列举出你所知道的全局环境变量 (亿邮)

    $ENV;
    $SERVER;
    $REQUEST;
    $FILES;
    $SESSION;
    $COOKIE;
    $GET;
    $POST;
    $GLOBALS;

    84. 设有这样一个数组$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,请问你如何使用 PHP 判断 id=>500 是否在这个数组内? (亿邮)

    使用 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";	}?>
    85. 在 PHP 中两个数组怎么连接合并在一起 (亿邮)

    使用 array_merge()函数

    86. 运行以上代码后$a $b $c 分别是? (卓望)
    <?php	$a = $b = $c = 0;	$a = $b && $c;?>

    $a 为 false,$b = $c = 0

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。