PHP基礎面試題


無亂碼截取中文字符

/**
 * utf8編碼字符串截取無亂碼
 * @param $str
 * @param $start
 * @param $len
 * @return string
 */
function  sub_str($str, $start, $len){
    //數組字符
    $str_array = preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY);
    $get_array = array_splice($str_array,$start,$len);
    return join("",$get_array);
}
$str='天氣真好呀';
echo sub_str($str,3,1);

echo mb_substr($str,3,1);

寫出下列幾個預定義全局變量的作用

$_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']//和該文件上傳相關的錯誤代碼

用最少的代碼寫一個求 3 值最大值的函數

function getMax($a, $b, $c)
{
    return ($a > $b) ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
}
echo getMax(2, 7, 5);

簡述 POST 和 GET 傳輸的最大容量分別是多少

POST 根據你 php.ini 文件配置(默認是 8M)
GET 的話大小限制在 2KB

差異:post是通過實體數據提交,可以通過表單提交大量信息。get數據通過URL參數 提交,傳輸的數據有限制。

不使用第三個變量交換兩個變量的值(厲害)

/*
       不使用第三個變量交換兩個變量的值
   */
// ================方法一==================
$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 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?


變量默認總是傳值賦值。
那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味着,例如,當一個變量的值賦予另外一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。
PHP 也提供了另外一種方式給變量賦值:引用賦值。
這意味着新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個&符號加到將要賦值的變量前(源變量),reference 傳送的是變量的地址而非它的值
對象默認是傳引用。
對於較大的數據,傳引用比較好,這樣可以節省內存的開銷。

將 1234567890 轉換成 1,234,567,890 每 3 ���用逗號隔開的形式

//第一種
$str = 1234567890;
$r_str= strrev($str);
$array_str =str_split($r_str,3);//返回數組
echo strrev(implode(',',$array_str));

//第二種
$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);

ort()、assort()、和 ksort() 有什么分別?它們分別在什么情況下使用?

sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 重新編號。主要是當數組索引鍵的值無關緊要時用來把數組排序
assort(),PHP 沒有 assort() 函式,所以可能是 asort() 的筆誤。
asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。
ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於希望把索引鍵排序的關聯數組

什么是可變變量

一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名

$a = 'hello';

$$a = 'world';

echo "$a ${$a}";
echo "$a $hello";

執行程序段<?php echo 8%(-2) ?>將輸出%為取模運算,輸出 0
$a % $b其結果的正負取決於 $a 的符號

echo ((-8)%3)."<br />";//輸出 -2
echo (8%(-3))."<br />";//輸出 2

數組函數 arsort 的作用是_;語句 error_reporting(2047)的作用是_

arsort:對數組進行逆向排序並保持索引關系
error_reporting(2047)的作用 report All errors and warnings

以 Apache 模塊的方式安裝 PHP,在文件 http.conf 中首先要用語句_動態裝載 PHP模塊,然后再用語句_使得 Apache 把所有擴展名為 php 的文件都作為 PHP 腳本處理。

LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php

一個函數的參數不能是對變量的引用,除非在 php.ini 中把____設為 on.

allow_call_time_pass_reference :是否啟用在函數調用時強制參數被按照引用傳遞,默認關閉。

echo count("abc"); 輸出什么

輸出 1
count :計算數組中的單元數目或對象中的屬性個數,通常是一個 array,任何其它類型都只有一個單元。
對於對象,如果安裝了 SPL,可以通過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。
如果 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,如果 var 是 NULL 則結果是 0。

寫 5 個不同的自己的函數,來獲取一個全路徑的文件的擴展名,允許封裝 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 的意思,它能干些什么

PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被廣泛應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML 中,尤其適合 web 開發。
PHP 主要是用於服務端的腳本程序,因此可以用 PHP 來完成任何其它的 CGI 程序能夠完成的工作,例如收集表單數據,生成動態網頁,或者發送/接收Cookies。但 PHP 的功能遠不局限於此。
PHP 腳本主要用於以下三個領域:

  • 服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。
  • 命令行腳本。可以編寫一段 PHP 腳本,並且不需要任何服務器或者瀏覽器來運行它。通過這種方式,僅僅只需要 PHP 解析器來執行。
  • 編寫桌面應用程序。

a=′abcdef′;請取出a 的值並打印出第一個字母

echo $a{0} 或 echo $a[0](當做數組訪問)

$a = in_array('01',array('1')) == var_dump('01' == 1),$a得值    FALSE

 

/*
        運行以下程序,$a 的值是多少?
    */
    $a = "hello";
    $b = &$a;
    unset($b);
    $b = "world";
    echo $a,$b;

//hello

val=max(′string′,array(2,5,7),42);val 值為

array(2,5,7)
max 用法示例如下:

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

Switch 完整語法和注意事項

使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數一樣運算的類型,比如char,使用時case 后用'',注意 break不能少,default是為了處理一些之前沒有包含到的情況,這樣更為安全。

簡述 GBK、GB2312、BIG5 、GB18030

GB2312 支持的漢字較少,GBK 是相比 GB2312 漢字更為豐富,包括全部中日韓漢字,GB18030 相比 GBK 增加了一些少數名族漢字漢字庫更為多樣,但是常人很難用到,一般簡體中文使用 GBK 而繁體中文使用 BIG5。

計算某段字符串中某個字符出現的次數(例如 : 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: Use of undefined constant a - assumed 'bar',最好 bar 加上引號function x($a = "1", $b){}`// 無,但給參數默認值應盡量從右向左

程序運算

$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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM