Q1: == 和 === 之间有什么区别?

如果是两个不同的类型,运算符 == 则在两个不同的类型之间进行强制转换

=== 操作符执行 ’ 类型安全比较’

这意味着只有当两个操作数具有相同的类型和相同的值时,它才会返回 true。

1 === 1: true
1 == 1: true
1 === "1": false // 1 是一个整数, "1" 是一个字符串
1 == "1": true // "1" 强制转换为整数,即1
"foo" === "foo": true // 这两个操作数都是字符串,并且具有相同的值

Q2: 如何通过引用传递变量?

为了能够通过引用传递变量,我们在其前面使用 &,如下所示:

$var1 = &$var

Q3: $GLOBAL 是什么意思?

$GLOBALS 是关联数组,包含对脚本全局范围内当前定义的所有变量的引用。

Q4: ini_set () 有什么用处?

PHP 允许用户使用 ini_set () 修改 php.ini 中提到的一些设置。此函数需要两个字符串参数。第一个是要修改的设置的名称,第二个是要分配给它的新值。

给定的代码行将启用脚本的 display_error 设置 (如果它被禁用)。

ini_set('display_errors', '1');

我们需要将上面的语句放在脚本的顶部,以便该设置一直保持启用状态,直到最后。此外,通过 ini_set () 设置的值仅适用于当前脚本。此后,PHP 将开始使用 php.ini 中的原始值。

Q5: 我应该在什么时候使用 require 和 include 呢?

require() 函数与 include() 函数相同,只是它处理错误的方式不同。如果出现错误,include() 函数会生成警告,但脚本会继续执行。require() 函数会产生致命错误,脚本会停止。

我的建议是 99.9% 的时间里只使用 require_once。

使用 require 或 include 代替意味着您的代码在其他地方不可重用,即您引入的脚本实际上是在执行代码,而不是提供类或某些类功能库。

Q6: PHP 中的 stdClass 是什么?

stdClass 只是将其他类型强制转换为对象时使用的通用 " 空 ‘’ 类。stdClass 不是 PHP 中对象的基类。这可以很容易地证明:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N'; // 输出'N'

对于匿名对象,动态属性等很有用。

考虑 StdClass 的一种简单使用场景是替代关联数组。请参见下面的示例,该示例显示 json_decode() 如何允许获取 StdClass 实例或关联数组。

同样但未在本示例中显示的 SoapClient::__soapCall 返回一个 StdClass 实例。

//带有StdClass的示例
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json); echo $stdInstance - > foo.PHP_EOL; //"bar"
echo $stdInstance - > number.PHP_EOL; //42 //Example with associative array
$array = json_decode($json, true); echo $array['foo'].PHP_EOL; //"bar"
echo $array['number'].PHP_EOL; //

Q7: PHP 中的 die () 和 exit () 函数有什么不同?

没有区别,它们是一样的。 选择 die() 而不是 exit() 的唯一好处可能是你节省了额外键入一个字母的时间.

Q8: 它们之间的主要区别是什么?

const 和 define 的根本区别在于,const 在编译时定义常量,而 define 在运行时定义常量。

const FOO = 'BAR';
define('FOO', 'BAR'); // but
if (...) {
const FOO = 'BAR'; // 无效
}
if (...) {
define('FOO', 'BAR'); // 有效
}

同样在 PHP 5.3 之前,const 命令不能在全局范围内使用。你只能在类中使用它。当你想要设置与该类相关的某种常量选项或设置时,应使用此选项。或者你可能想要创建某种枚举。一个好的 const 用法的例子是摆脱了魔术数字。

Define 可以用于相同的目的,但只能在全局范围内使用。它应该仅用于影响整个应用程序的全局设置。

除非你需要任何类型的条件或表达式定义,否则请使用 consts 而不是 define()—— 这仅仅是为了可读性!

Q9: isset () 和 array_key_exists () 之间有什么区别?

array_key_exists 它会告诉你数组中是否存在键,并在 $a 不存在时报错。

如果 key 或变量存在且不是 null,isset 才会返回 true。当 $a 不存在时,isset 不会报错。

考虑:

$a = array('key1' => 'Foo Bar', 'key2' => null);

isset($a['key1']); // true
array_key_exists('key1', $a); // true isset($a['key2']); // false
array_key_exists('key2', $a); // true

Q10: var_dump () 和 print_r () 有什么不同?

var_dump 函数用于显示变量 / 表达式的结构化信息,包括变量类型和变量值。数组递归浏览,缩进值以显示结构。它还显示哪些数组值和对象属性是引用。

print_r() 函数以我们可读的方式显示有关变量的信息。数组值将以键和元素的格式显示。类似的符号用于对象。

考虑

$obj = (object) array('qualitypoint', 'technologies', 'India');
var_dump($obj) 将在屏幕的输出下方显示:
object(stdClass)#1 (3) {
[0]=> string(12) "qualitypoint"
[1]=> string(12) "technologies"
[2]=> string(5) "India"
}

print_r($obj) 将在屏幕的输出下方显示。

stdClass Object (
[0] => qualitypoint
[1] => technologies
[2] => India
)

Q11: 解释不同的 PHP 错误是什么?

notice 不是一个严重的错误,它说明执行过程中出现了一些错误,一些次要的错误,比如一个未定义的变量。

当出现更严重的错误,如 include () 命令引入不存在的文件时,会给出警告 warning。 这个错误和上面的错误发生,脚本都将继续。

fatal error 致命错误将终止代码。未能满足 require () 将生成这种类型的错误。

Q12: 如何在 PHP 中启用错误报告?

检查 php.ini 中的 “display_errors” 是否等于 “on”,或者在脚本中声明 “ini_set(‘display_error’,1)”。

然后,在你的代码中包含 “ERROR_REPORTING(E_ALL)”,以便在脚本执行期间显示所有类型的错误消息

Q13: 使用默认参数声明某些函数

思考:

function showMessage($hello = false){
echo ($hello) ? 'hello' : 'bye';
}

Q14: PHP 是否支持多重继承?

PHP 只支持单一继承;这意味着使用关键字 ‘extended’ 只能从一个类扩展一个类。

Q15: 在 PHP 中,对象是按值传递还是按引用传递?

在 PHP 中,通过值传递的对象。

Q16:$a != $b 和 $a !== $b ,之间有什么区别?

!= 表示 不等于 (如果 $a 不等于 $b,则为 True), !== 表示 不全等 (如果 $a 与 $b 不相同,则为 True).

Q17: 在 PHP 中,什么是 PDO?

PDO 代表 PHP 数据对象。

它是一组 PHP 扩展,提供核心 PDO 类和数据库、特定驱动程序。它提供了供应商中立、轻量级的数据访问抽象层。因此,无论我们使用哪种数据库,发出查询和获取数据的功能都是相同的。它侧重于数据访问抽象,而不是数据库抽象。

Q18: 说明我们如何在 PHP 中处理异常?

当程序执行出现异常报错时,后面的代码将不会再执行,这时 PHP 将会尝试匹配第一个 catch 块进行异常的处理,如果没有捕捉到异常程序将会报致命错误并显示 “Uncaught Exception”。

可以在 PHP 中抛出和捕获异常。

为了处理异常,代码可以被包围在 “try” 块中.

每个 try 必须至少有一个对应的 catch 块 。多个不同的 catch 块可用于捕获不同类的异常。

在 catch 块中也可以抛出异常(或重新抛出之前的异常)。

思考:

try {
print "this is our try block n";
throw new Exception();
} catch (Exception $e) {
print "something went wrong, caught yah! n";
} finally {
print "this part is always executed n";
}

Q19: 区分 echo 和 print ()

echo 和 print 基本上是一样的。他们都是用来打印输出数据的。

区别在于:

  • echo 没有返回值,而 print 的返回值为 1,因此 print 可以在表达式中使用。
  • echo 可以接受多个参数一起输出 (但是这种多个的输出方式很少见),而 print 一次只可以输出一个参数。
  • echo 的输出比 print 效率要高一些 .

Q20: require_once 和 require 在什么场景下使用?

require_once() 作用与 require() 的作用是一样的,都是引用或包含外部的一个 php 文件,require_once() 引入文件时会检查文件是否已包含,如果已包含,不再包含 (require) 它。

我建议在 99.9% 的时候要使用 require_once

使用 require 或 include 意味着您的代码不可在其他地方重用,即您要拉入的脚本实际上是在执行代码,而不是提供类或某些函数库。

Q21: 检查PHP数组是否关联

考虑:

function has_string_keys(array $array) {
return count(array_filter(array_keys($array), 'is_string')) > 0;
}

如果至少有一个字符串键,$array 将被视为一个关联数组

Q22: 如何将变量和数据从PHP传递到JavaScript?

实际上,有几种方法可以做到这一点:

使用AJAX从服务器获取所需的数据。考虑get-data.php:

echo json_encode(42);

考虑 index.html:

<script>
function reqListener () {
console.log(this.responseText);
} var oReq = new XMLHttpRequest(); // New request object
oReq.onload = function() {
// This is where you handle what to do with the response.
// The actual data is found on this.responseText
alert(this.responseText); // Will alert: 42
};
oReq.open("get", "get-data.php", true);
// ^ Don't block the rest of the execution.
// Don't wait until the request finishes to
// continue.
oReq.send();
</script>

将数据回显到页面中的某个位置,然后使用JavaScript从DOM获取信息

<div id="dom-target" style="display: none;">
<?php
$output = "42"; // Again, do some operation, get the output.
echo htmlspecialchars($output); /* You have to escape because the result
will not be valid HTML otherwise. */
?>
</div>
<script>
var div = document.getElementById("dom-target");
var myData = div.textContent;
</script>

将数据直接回显到JavaScript。

<script>
var data = <?php echo json_encode("42", JSON_HEX_TAG); ?>; // Don't forget the extra semicolon!
</script>

Q23:是否有将PHP数组复制到另一个数组的函数?

在PHP中,数组是通过副本分配的,而对象是通过引用分配的,因此PHP将默认复制数组。PHP中的引用必须明确:

$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a

Q24:此代码将返回什么?

考虑一下代码:

$a = new stdClass();
$a->foo = "bar";
$b = clone $a;
var_dump($a === $b);

控制台会回显什么?
具有相等成员的同一个类的两个实例与===运算符不匹配。因此答案是:

bool(false)

Q25:此代码将返回什么?解释结果。
考虑代码。结果将返回什么?

$something = 0;
echo ('password123' == $something) ? 'true' : 'false';

答案是true。您永远不要将其==用于字符串比较。即使将字符串与字符串进行比较,PHP也会将它们隐式转换为浮点数,并且如果它们看起来是数字,则进行数字比较。===还可以

例如

'1e3' == '1000' // true

也返回true。

Q26:array_map,array_walk和array_filter之间到底有什么区别?

  • array_walk 接受一个数组和一个函数F,并通过用F(x)替换每个元素x对其进行修改。
  • array_map 进行完全相同的操作,除了不进行就地修改,而是返回包含转换后元素的新数组。
  • array_filter 使用函数F,而不是变换元素,将删除F(x)不为真的所有元素

Q27:解释exec()与system()与passthru()之间的区别?

  • exec() 用于调用系统命令,并且可能自己处理输出。
  • system() 用于执行系统命令并立即显示输出-大概是文本。
  • passthru() 用于执行您希望从中返回原始数据的系统命令-大概是二进制文件。

今日就暂时分享到这,明天持续更新

找工作的你不容错过的45个PHP面试题附答案(上篇)的更多相关文章

  1. 找工作的你不容错过的45个PHP面试题附答案(下篇)

    找工作的你不容错过的45个PHP面试题附答案(上篇) Q28:你将如何使用PHP创建Singleton类? /** * Singleton class * */ final class UserFac ...

  2. 转:45 个 LoadRunner 面试问题(附答案)_纯英文,太有逼格了

    What is load testing? - Load testing is to test that if the application works fine with the loads th ...

  3. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  4. 每位iOS开发人员不容错过的10大实用工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  5. 不容错过的超赞项目管理PPT

    不容错过的超赞项目管理PPT(转载) 大公司的一个好处,是各个领域都有牛人,可以为你提供经验分享交流.腾讯庞大的培训体系更是保证了:如果你想学点什么东西,你总可以学到.腾讯内部资源30页PPT曝光 — ...

  6. 每位iOS开发者不容错过的10大有用工具

    内容简单介绍 1.iOS简单介绍 2.iOS开发十大有用工具之开发环境 3.iOS开发十大有用工具之图标设计 4.iOS开发十大有用工具之原型设计 5.iOS开发十大有用工具之演示工具 6.iOS开发 ...

  7. 13个不容错过的Java项目

    今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎 ...

  8. IT行业歧视40岁以上人群为找工作还要谎报年龄[转]

    IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...

  9. 你不容错过的 腾讯 AlloyTeam Web 前端大会 看点完全剖析

    AC大会 ( Alloyteam Conf ),是由腾讯前端技术团队的标杆团队 AlloyTeam 发起的前端技术大会,旨在分享团队在技术研究.产品研发.开源项目的经验沉淀.AC2017 将会继续在工 ...

随机推荐

  1. 什么是JDK的SPI机制

    什么是SPI和API Application Programming Interface (API)? The API is the description of classes/interfaces ...

  2. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之Nginx配置

    搭建好LNMP环境之后,接着要考虑的就是整个系统的并发能力了. 一.Nginx的配置 Nginx有很好的并发能力.但是要想使它的并发能力能够施展出来,需要在初步安装好的Nginx上做一些配置.主要需要 ...

  3. LeetCode 81,在不满足二分的数组内使用二分法 II

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第50篇文章,我们来聊聊LeetCode中的81题Search in Rotated Sorted ArrayII ...

  4. 每日一题 - 剑指 Offer 32 - III. 从上到下打印二叉树 III

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag:双端队列 难易程度:中等 题目描述: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右 ...

  5. Fetch.AI 首席技术官Toby Simpson参与AMA活动

    感谢7月11日在YouTube上参与 Fetch.AI AMA的所有人.我们收到了大量的问题,遗憾的是我们没有时间回答其中的多数问题.如果你错过了现场AMA,你可以在下面观看全部内容: 在本文中,我们 ...

  6. Python pip 国内镜像大全及使用办法

    Python pip 国内镜像大全及使用办法 一.国内镜像 清华 https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣 pip install -i http://p ...

  7. 数据可视化之DAX篇(二十六)Power BI度量值:滚动聚合

    https://zhuanlan.zhihu.com/p/85996745 上一篇文讲了累计聚合,这篇文章继续讲一下滚动聚合,比如常用的MAT计算,Moving Annual Total,滚动年度总计 ...

  8. Python之 爬虫(二十三)Scrapy分布式部署

    按照上一篇文章中我们将代码放到远程主机是通过拷贝或者git的方式,但是如果考虑到我们又多台远程主机的情况,这种方式就比较麻烦,那有没有好用的方法呢?这里其实可以通过scrapyd,下面是这个scrap ...

  9. Python之爬虫(二十二) Scrapy分布式原理

    关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列. 分布式架 ...

  10. C与lua交互--lua调用栈分析(2)

    0 预备知识: 至少对Lua手册C API有简单的了解.lua5.3手册中文 1  Lua虚拟机的栈,如图: 假设虚拟机的栈有n个数据: 解释: 两种解释方式: A,栈顶开始, -1 ...-n B, ...