2017年8道php面試題(真題+答案)


1、<?php echo count(strlen(“http://php.net”)); ?>的執行結果是?

 

答案:1

 

講解:count(var)是用來統計數組或對象的元素個數的。當varnull或者空數組時,結果為0。如果var是普通變量,則返回1。正常情況下返回var中的元素或屬性個數。

 

 

 

2、使用list()函數需要注意什么?

 

答案:list()是一個語法結構。List($array)是用來快速把數組中的元素賦給一些變量。使用時要注意,$array必須為一個索引數組,並且索引值從0開始。

 

 

3、請說明php.ini中的safe_mode開啟之后影響了哪些函數?

答案:Safe_modephp的安全模式。開啟之后,主要會對系統操作、文件、權限設置等方法產生影響主要用來應對webshell。以下是受到影響的一些函數:ckdirmove_uploaded_file,chgrp,parse_ini_file,

chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink,exec,

shell_exec,pasathru,system,popen

需要注意的是:在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性完全去除了。

 

 

4、請對POSIX風格和兼容Prel風格兩種正則表達式的主要函數進行類比說明。

 

答案:POSIX 風格 : 匹配正則表達式ereg  和替換 ereg_replace

 

  Prel風格:匹配正則表達式 preg_match  和替換 preg_replace

 

  Preg_match ereg的執行效率更快,preg_replace ereg_replace的執行效率更快。

 

 

5、如何在命令下運行php腳本(寫出兩種方式),如何向php腳本傳遞參數?

 

 

答案:第一種方式:先進入php安裝目錄,執行 php 路徑/文件名.php

 

例:php my_script.php     php -f  "my_script.php"

 

第二種方式:php -r php腳本;(不需要加php的開始符和結束符)

 

例:php -r "print_r(get_defined_constants());"

 

向php腳本傳遞參數:

 

第一種方式:php -r "var_dump($argv);" -- -h  (注意:如果要傳遞的參數開頭為-,那么得使用參數列表分隔符 -- 才能正確傳參。)

 

第二種方式:test.php文件代碼:#!/usr/bin/php  <?phpvar_dump($argv);?>

 

    ./test.php -h -- foo(php文件開頭加入#!/usr/bin/php,即可直接傳遞以-為開頭得參數)

 

 

 

 

6、php5中魔術方法有哪幾個?請舉例說明各自的用法。

 

答案:

1、__construct() :實例化對象時自動調用。

 

2、__destruct() :銷毀對象或腳本執行結束時自動調用。

 

3、__call() :調用對象不存在得方法時執行此函數。

 

4、__get() :獲取對象不存在的屬性時執行此函數。

 

5、__set() :設置對象不存在的屬性時執行此函數。

 

6、__isset() : 檢測對象的某個屬性是否存在時執行此函數。

 

7、__unset() :銷毀對象的某個屬性時執行此函數。

 

8、__toString() :將對象當作字符串輸出時執行此函數。

 

9、__clone() :克隆對象時執行此函數。

 

10、__autoload() :實例化對象時,當類不存在時,執行此函數自動加載類。

 

11、__sleep() serialize之前被調用,可以指定要序列化的對象屬性。

 

12、__wakeup unserialize之前被調用,可以執行對象的初始化工作。

 

13、__set_state() :調用var_export時,被調用。用__set_state的返回值做為var_export的返回值。

 

14、__invoke() :將對象當作函數來使用時執行此方法,通常不推薦這樣做。

 

 

 

7、簡述php的垃圾收集機制。

答案:php中的變量存儲在變量容器zval中,zval中除了存儲變量類型和值外,還有is_refrefcount字段。refcount表示指向變量的元素個數,is_ref表示變量是否有別名。如果refcount0時,就回收該變量容器。如果一個zvalrefcount1之后大於0,它就會進入垃圾緩沖區。當緩沖區達到最大值后,回收算法會循環遍歷zval,判斷其是否為垃圾,並進行釋放處理。

關於此問題(http://blog.csdn.net/niluchen/article/details/9468365)有各為詳細的講解!

 

8、php實現一個雙向隊列。

 

隊列是一種線性表,按照先進先出的原則進行

 

單向隊列:只能從頭進,從尾出

 

雙向隊列:頭尾都可以進出

 

class DuiLie {

 

private $array = array();//聲明空數組

 

public function setFirst($item){

 

return array_unshift($this->array,$item);//頭入列

 

}

 

public function delFirst(){

 

return array_shift($this->array);//頭出列

 

}

 

public function setLast($item){

 

return array_push($this->array,$item);//尾入列

 

}

 

public function delLast(){

 

return array_pop($this->array,$item);//尾出列

 

}

 

public function show(){

 

var_dump($this->array);//打印數組

 

}

 

public function Del(){

 

unset($this->array);//清空數組

 

}

 

}

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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