2024年php面试题.docx
2024年php面试题 2024php面试题7篇 这是一份比较全面的PHP面试题,对打算去新公司应聘PHP职位的开发者应当有帮助。 或者说,对聘请PHP开发人员的企业也有些帮助!下面是我为大家整理的2024php面试题,假如大家喜爱可以共享给身边的挚友。 2024php面试题(篇1) 1.以下哪一句不会把 John 新增到 users 阵列? $users = 'john' 胜利把 John 新增到阵列 users。 array_add($users,john); 函式 array_add() 无定义。 array_push($users,john); 胜利把 John 新增到阵列 users。 $users |= 'john' 语法错误。 2.sort()、assort()、和 ksort() 有什么分别?它们分别在什么状况下运用? sort() 依据阵列中元素的值,以英文字母依次排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。 assort() PHP 没有 assort() 函式,所以可能是 asort() 的笔误。 asort() 与 sort() 一样把阵列的元素按英文字母依次来排列,不同的是全部索引键都获得保留,特殊适合替联想阵列排序。 ksort() 依据阵列中索引键的值,以英文字母依次排序,特殊适合用于希望把索引键排序的联想阵列。 3.以下的代码会产生什么?为什么? $num =10; function multiply() $num =$num _10; multiply(); echo $num; 由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者 $_GLOBALS'num'),所以 $num 的值是 10。 4. reference 跟一个正规的变量有什么分别?如何 pass by reference?在什么状况下我们须要这样做? Reference 传送的是变量的地址而非它的值,所以在函式中变更一个变量的值时,整个应用都见到这个变量的新值。 一个正规变量传送给函式的是它的值,当函式变更这个变量的值时,只有这个函式才见到新值,应用的其他部分仍旧见到旧值。 $myVariable = ”its' value“;Myfunction($myVariable); / 以 reference 传送参数以 reference 传送参数给函式,可以使函式变更了的变量,即使在函式结束后仍旧保留新值。 5.些函式可以用来在现正执行的脚本中插入函式库? 对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎 include()、include_once()、require()、require_once(),但细心再想,“函式库”也应当包括 com 物件和 .net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,下次有人提起“函式库”的时候,别遗忘这两个函式。 6.foo() 与 foo() 有什么分别? foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。 foo() 在执行这个函式时,会隐藏全部上述的错误讯息。 许多应用程式都运用 mysql_connect() 和 mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严峻的失误,因为错误不该被隐藏,你必需妥当处理它们,可能的话解决它们。 7.你如何替 PHP 的应用程式侦错? 我并不常这样做,我曾经试过许多不同的侦错工具,在 Linux 系统中设定这些工具一点也不简单。不过以下我会介绍一个近来颇受注目的侦错工具。 PHP - Advanced PHP Debugger 或称 PHP - APD,第一步是执行以下的指令安装: pear install apd安装后在你的脚本的开头位置加入以下的语句起先进行侦错: apd_set_pprof_trace();执行完毕,打开以下档案来查阅执行日志: apd.dumpdir 你也可以运用 pprofp 来格式化日志。 具体的资料可以参阅 8.“=”是什么?试举一个“=”是真但“=”是假的例子。 “=”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。 问题的其次部份有点困难,想一个“=”是假,但是“=”是真的例子却很简单,相反的例子却很少。但我最终找到以下的例子: if (strpos(”abc“, ”a“) = true) / 这部分永不会被执行,因为 ”a“ 的位置是 0,换算成布尔值“假”if (strpos(”abc“, ”a“) = true) / 这部份会被执行,因为“=”保证函式 strpos() 的送回值不会换算成布尔值. 9.你会如何定义一个没有成员函式或特性的类别 myclass? class myclass 10.你如何产生一个 myclass 的物件? $obj = new myclass(); 11.在一个类别内如何存取这个类别的特性及变改它的值? 运用语句:$this->propertyName,例如: class myclass private $propertyName; public function _construct() $this->propertyName = ”value“; 12.include 和 include_once 有什么分别?require 又如何? 三者都是用来在脚本中插入其他档案,视乎 url_allow_fopen 是否核准,这个档案可以从系统内部或外部取得。但他们之间也有微细的分别: include():这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并接着执行脚本。 include_once():它跟 include() 的功能相像,正如它的名字所示,在脚本的执行期间,有关档案只会 入一次。 require():跟 include() 差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行 13.以下哪一个函式可以把阅读器转向到另一个页面? redir() 这不是一个 PHP 函式,会引致执行错误。 header() 这个是正确答案,header() 用来插入卷头资料,可以用来使阅读器转向到另一个页面,例如: header(”Location: www.search- location() 这不是一个 PHP 函式,会引致执行错误。 redirect() 这不是一个 PHP 函式,会引致执行错误。 14.以下哪一个函式可以用来开启档案以便读写? fget() 这不是一个 PHP 函式,会引致执行错误, file_open() 这不是一个 PHP 函式,会引致执行错误。 fopen() 这是正确答案,fopen() 可以用来开启档案以便读写,事实上这个函式还有许多选项,具体资料请参阅 。 open_file() 这不是一个 PHP 函式,会引致执行错误。 15.mysql_fetch_row() 和 mysql_fetch_array() 有什么分别? mysql_fetch_row() 把数据库的一列储存在一个以零为基数的阵列中,第一栏在阵列的索引 0,其次栏在索引 1,如此类推。mysql_fetch_assoc() 把数据库的一列储存在一个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回“first_name”、“last_name”、“email”三个栏位,阵列的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。 16.下面的代码用来做什么?请说明。 $date='08/26/'print ereg_replace(”(0-9+)/(0-9+)/(0-9+)“,”2/1/3“,$date); 这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。我的一个好挚友告知我可以把这个正规表达式拆解为以下的语句,对于如此简洁的表示是来说其实无须拆解,纯粹为了解说的便利: / 对应一个或更多 0-9,后面紧随一个斜号$regExpression = ”(0-9+)/“;/ 应一个或更多 0-9,后面紧随另一个斜号$regExpression .= ”(0-9+)/“;/ 再次对应一个或更多 0-9$regExpression .= ”(0-9+)“;至于 2/1/3 则是用来对应括号,第一个括号对的是月份,其次个括号对应的是日期,第三个括号对应的是年份。 17.给你一行文字 $string,你会如何编写一个正规表达式,把 $string 内的 HTML 标签除去? 首先,PHP 有内建函式 strip_tags() 除去 HTML 标签,为何要自行编写正规表达式?好了,便当作是面试的一道考题吧,我会这样回答: $stringOfText = ” This is a test “;$expression = ”/<(._?)>(._?)/“;echo preg_replace($expression, ”2“, $stringOfText);/ 有人说也可以运用 /(<>_>)/ $expression = ”/(<>_>)/“;echo preg_replace($expression, ”“, $stringOfText); 18.PHP 和 Perl 辨别阵列和散列表的方法有什么差异? 这正是为何我老是告知别人选择适当的编程语言,若果你只用一种语言的话你怎么能回答这道问题?这道问题很简洁,Perl 全部阵列变量都是以 开头,例如 myArray,PHP 则沿用 $ 作为全部变量的开头,例如 $myArray。 至于 Perl 表示散列表则用 %,例如 %myHash,PHP 则没有分别,仍是运用 $,例如 $myHash。 19.你如何利用 PHP 解决 HTTP 的无状态本质? 最主要的俩各选择是 session 和 cookie。运用 session 的方法是在每一页的起先加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。至于 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函式,此外只需运用 $_COOKIE 散列表便可以存取全部 cookie 变量。 还有一个不那么牢靠的方法,就是利用访客的 IP 地址,这个方法有特定的危急性。 20.GD 函式库用来做什么? 这个可能是我最喜爱的函式库,自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。这个函式库让你处理和显示各式格式的图档,它的另一个常见用途是制作所图档。GD 以外的另一个选择是 ImageMagick,但这个函式库并不内建于 PHP 之中,必需由系统管理员安装在伺服器上。 21.试写出几个输出一段 HTML 代码的方法。 嗯,你可以运用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都运用如下例的 echo: echo ”My string $variable“;你也可以运用这种方法: echo <<<endthis text= is= written= to= the= screen= as= output= and= this= $variable= parsed= too.= if= you= wanted= can= have= html= tags= in= here= well.= end;= remarks= must= be= a= line= of= its= own,= can't= contain= any= extra= white= space.end; 22.PHP 比 Perl 好吗?请探讨。 我们不要为一个简洁的问题引发一场舌战,正如我常常说的:“为工作选择适合的语言,不要把工作迁就语言。”我个人认为 Perl 非常适合用作吩咐行工具,虽然它在网页应用上也有不错的表现,但是它的真正实力在吩咐行上才能充分发挥。同样地,PHP 虽然可以在限制台的环境中运用,但是个人认为它在网页应用上有更好的表现,PHP 有大量特地为网页应用而设计的函式,Perl 则好像以吩咐行为设计之本。 个人来说两种语言我都喜爱,在高校期间我常常运用 Perl、PHP 和 Java,惋惜工作上我运用 C#,但在家里我花不少时间操练 PHP、Perl、Ruby(现正学习)和 Java,保持我的技能学问在最新状态。许多人问我 C 和 C+ 怎么样,它们是否仍有机会在我的应用中占一席位,我的答案基本上是“否”,我近来的工作主要集中在网页开发,虽然 C 和 C+ 也可以用来写网页,但它们究竟不是为这种工作而设计的,“为工作选择适合的语言”,若果我须要编写一个限制台应用,用来展示 bubble sort、quick sort 和 merge sort 的效能比较,我肯定会运用 C / C+。若果我须要编写一个相片簿系统,我会运用 PHP 或者 C#(我认为制作用户介面方面 .NET 语言比网页更加)。 更多相关的面试问题文章举荐,大家敬请接着阅读:微软常见面试问题 国企面试常见问题及答案 外资银行面试问题集锦 2024php面试题(篇2) PHP面试题附答案 1. Which of the following will not add john to the users array? 1. $users = john; 2. array_add($users,john); 3. array_push($users,john); 4. $users |= john; Answer: 2,4 2. Whats the difference between sort, asort() and ksort(),rsort()? Under what circumstances would you use each of these? sort(): 本函数对数组的值进行排序,当本函数结束时数组单元将被从最低到最高重新支配,array 中的单元给予新的键名。这将删除原有的键名而不仅是重新排序。 asort(): 这个函数将数组的值重新排序,由小至大排列。数组的索引亦跟着值的 依次而变动。当您在程序中须要重新整理数组值的 依次时,就可以运用这个函数。 ksort(): 对数组根据键名排序,保留键名到数据的关联。本函数主要用于关联数组。 rsort(): 本函数对数组进行逆向排序(最高到最低)。与sort()执行相反的操作。 3. What would the following code print to the browser? Why? $num = 10; function multiply() $num = $num _ 10; multiply(); echo $num; 10 4. What is the difference between a reference and a regular variable? How do you pass by reference why would you want to? pass by reference like this functions($vars); it likes more fast; 5. What functions can you use to add library code to the currently running script? inlcude() or require(); 6. What is the difference between foo() foo()? if foo() throw a error, will be alert, but foo() no; 7. How do you debug a PHP application? xdebug or use die() do it; 8. What does = do? Whats an example of something that will give true for =, but not =? = 用于精确比较 ex: (” = null) => true but ( ”=null) =>false; 9. How would you declare a class named “myclass” with no methods or properties? class myclass 10. How would you create an object, which is an instance of “myclass”? $myoject = new myclass(); 11. How do you access and set properties of a class from within the class? getVar() or setVar() ; 12. What is the difference between include include_once? include require? require:PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的.一部份, 常用的函式,亦可以这个方法将它引入网页中。错误产生致命错误。 include:这个函式一般是放在流程限制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简洁化。错误产生警报。 include_once:此行为和include()语句类似,唯一区分是假如该文件中的代码已经被包含了,则不会再次包含。犹如此语句名字示意的那样,只会包含一次。 13. What function would you use to redirect the browser to a new page? 1. redir() 2024php面试题(篇3) 1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和GET传输的最大容量分别是多少? 6. 用最少的代码写一个求3值最大值的函数. 以下是部分答案(不保证是正确的解) 1. 不能 2 fsockopen 4 (不做优化的状况下一样) 5 2MB,1024B 6 function($a,$b,$c) return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c ); C 大公司的pHp面试题 2. 求两个日期的差数,例如-2-5 2024-3-6 的日期差数 $begin=strtotime(2024-2-5); $end=strtotime(2024-3-6); echo ($end-$begin)/(24_3600); 3. 请写一个函数,实现以下功能: 字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。 function str_change($str) $str = str_replace ( “_”, ” “, $str ); $str = ucwords ( $str ); $str = str_replace ( ” “, “”, $str ); return $str; 4. 要求写一段程序,实现以下数组$arr1转换成数组$arr2: $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 ) ); $arr2 = array ( 0 => array ( 0 => array ( tid => 1, name => Name1), 1 => array ( tid => 2, name => Name2), 2 => array ( tid => 5, name => Name3), 2024php面试题(篇4) php工程师面试题及答案 【1 】Memcached、redis的运用和理解 Memcached和redis 都是一个key-value的内存式存储系统,通过hash表来存储检索结果,做到强大的缓存机制。像新浪的微博、淘宝等大流量站点都必需的运用了这些东东。 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简洁的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。 【2】你对于设计模式和MVC的理解 Model-View-Controller,模型、视图、限制器,一想到MVC就会想到JAVA,因为JAVA是一个完全面对对象的语言,MVC最早出现在smalltalk中,其核心就是要将试图和数据模型分别,这样不同的程序就可以有不同的展示。 模型,即程序员写的功能、算法和数据模型,也就是我们说的系统业务逻辑层。 视图,即前端,图形界面。展示给用户看的。 限制器,主要负责对恳求处理、转发和加载视图。 设计模式,说白了就是代码的设计阅历的总结和归类,设计模式最早应用于建筑行业,编程的设计模式按最早的GoF所述,包括23种设计模式,主要用于面对对象的程序编程。遵循几个设计原则:开闭原则、单一职责原则、里氏替换原则、依靠注入、接口分别、迪米特原则、优先运用组合而不是继承等等。包括创建型模式、结构性模式、行为模式三类。 【3】HTTP协议1.0及1.1的区分,并简洁说下HTTP协议 HTTP,超文本传输协议。它定义了阅读器和服务器的通信规则。HTTP协议是基于TCP/IP的TCP协议上,现在万维网运用的是HTTP1.1版本,其特点包括,C/S模式,恳求简洁(GET/POST/HEAD),敏捷(可以传输任何类型的数据HTML、XML、JSON、自定义等),无连接(每次连接只处理一个恳求,从发出恳求到收到200状态为止断开连接),无状态。 对HTTP协议的考察主要包括,响应消息格式、恳求消息格式、状态码等学问点。 一般一个HTTP协议包括:起始行(start line)、首部(header)、主体(body)三个部分。 响应消息格式 HTTP/1.1 200 0K Connectlon:close Date: Thu, 13 Oct 03:17:33 GMT Server: Apache/2.0.54 (Unix) LastNodified:Mon,22 Jun 09;23;24 GMT ContentLength:682l ContentType:text/html 这个响应消息分为3部分:1个起始的状态行(status line),首部、1个包含所恳求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、缘由短语字段。 恳求消息格式 GET /somedir/page.html HTTP/1.1 Host: Connection:close User-agent:Mozilla/4.0 Accept-language:zh-cn (额外的回车符和换行符) 该恳求消息的第一行称为恳求行 (request line),后续各行都称为头部行(header)。恳求行有3个字段:方法字段、URL字段、HTTP版本字段。 状态码参见 1_ 消息 2_ 胜利 3_ 重定向 4_ 恳求错误 5_ 服务器错误 常见状态码 200 OK。恳求已胜利,恳求所希望的响应头或数据体将随此响应返回。 300 Multiple Choices。恳求资源有多个选择,如恳求文本有法语版、英语版等等。 301 Moved Permanently。表示恳求的网页已永久转移到新位置 302 Found。表示页面在做临时跳转时返回的状态。 304 Not Modified。客户的缓存资源是最新的, 要客户端运用缓存。 400 Bad Request。错误的恳求。 403 Forbidden。恳求被服务器拒绝了。 404 Not Found。表示服务器找不到恳求的网页,服务器上不存在的网页常常会返回的HTTP状态码。 500 Internal Server Error。 503 Service Unavailable。服务器目前无法为恳求供应服务,但过一段时间就可以复原服务。 504 Gateway Timeout。与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时。 505 HTTP Version not supported。 HTTP协议版本不支持。 【4】简洁说下Apache中rewrite机制和PHP框架中URI路由机制 1)URL重写,其实就是把用户通过阅读器恳求的URL,到了后台,apache依据预先配置的重写规则将该恳求指向真正的资源路径,说白了就是打马虎眼,把真正的路径改头换面后给用户访问,可问题是这样做有啥用处呢。 1、SEO方面。将动态的URL静态化,以满意搜寻引擎的胃口。 2、访问限制。比如,通过重写规则后,客户端不易推断后台程序类型等。 3、URL重定向。当网站更改域名或增加别名URL后,可以通过规则轻松的指向要访问的'URL。 httpd.apache.org/docs/current/mod/mod_rewrite.html mod_rewrite 运用基于正则表达式动态的修改传入恳求的URL。它可以将URL映射到文件系统路径,也可以将一个URL映射到另一个URL。它运用了没有限制数量的规则来操纵URL,每条规则可以包括没有限制数量的附加条件。你可以通过多种方式来检测,如,服务器变量、环境变量、HTTP头、时间戳等。 mod_rewrite 操作整个URL路径,包括path-info的部分。一个重写规则可以被设置在http.conf或者.htaccess中。一个重写规则生成的路径可以包括一个恳求字符串,或者内部的子程序处理,外部恳求的重定向,或者穿透内部代理等。 2)PHP框架中的URI路由机制,与apache重写类似,一般包括通配符和正则两种规则。让用户可以重新定向(remap)URI处理程序. 设定你自己的路由规则。 【5】MySQL的索引机制,复合索引的运用原则 (深化浅出MySQL一书中对索引的运用讲的比较细致) 一般都会用书本中的书目来介绍索引机制,包括有些书本会有特地的快速检索附录,就很类似于数据库的索引。 MySQL的索引包括4类:主键索引(primary key)、唯一索引(unique)、常规索引(index)、全文索引(fullindex)。 Show index from table_name; 查看表中的索引 Show status like Handler_read% 查看索引的运用状况 复合索引,一般遵循最左前缀原则,如table_a 的 a b c 三列建复合索引 create index ind_table_a on table_a(a,b,c); 那么,只有在条件中用到a,或者a、b,或者a、b、c这样的状况下,才会用到刚建的复合索引。 【6】如何理解OOP OOP,面对对象编程,包括三个方面,继承性、封装性、多态性,其中最根本的东西就是抽象。 继承性,即扩展性,通过子类对已经存在的父类进行功能扩展。 封装性,要求外部不能随意存取对象的内部数据,即对该类中的详细实现做封装,用户不必知道内部的详细实现,只有知道它是干什么的,怎么用就好了。 多态性,就是类的抽象和接口,同一个类能够处理多种类型对象的实力。 我们在现实中,看到的任何东东都可以看做为一个对象,然后通过进一步的抽象为类,类又可以演化为许多类似的对象。举个简洁的例子,将我们看到的一个房子抽象为一个ROOM类,包括基本的门,窗,桌子等物件,人可以进出等功能。 现在我们继承ROOM类为Classroom,包括扇门,有大窗,有桌椅,另外只包括一个黑白和一个讲台,老师和同学可以上课。现在我们实例化这个Classroom类为Classroom_621对象,包括两扇门,四扇大窗,30套桌椅,有同学正在上毛概课。 2024php面试题(篇5) 1、谈对mvc的相识? 答:由模型(Model),视图(View),限制器(Controller)完成的应用程序 由模型发出要实现的功能到限制器,限制器接收组织功能传递给视图; 2、写动身贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email) 答:SELECT _ FROM members ORDER BY posts DESC limit 0,10; 3、GD库是做什么用的? 答:gd库供应了一系列用来处理图片的功能,运用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 4、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么别? 答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串 char的场地固定