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. CodeForces 1293 C NEKO's Maze Game

    [题目链接] [题目大意] 有一个2 ∗ n的地图,小女孩从(1,1)想移动到(2,n) 有q次询问,每次询问更改一个格子状态(是否可以通过) 只能上下左右移动而不能斜着移动,问每次操作后,是否可以移 ...

  2. opencv3.4.9 + armv7 + arm-linux-gnueabihf交叉编译

    使用CMake指定交叉编译链会有很多报错,原因可能是其找交叉编译的库或这头文件会自动链接到本地的库或者头文件. 可以使用Qt设置好交叉编译环境后,将CMakeLists.txt文件放入,直接编译通过即 ...

  3. day14总结

    装饰器 """1.什么是装饰器 器指的是工具/功能 装饰指的是为被装饰对象添加额外的功能 大白话:定义装饰器就是定义了一个函数,该函数就是用来为其他函数添加额外的功能的 ...

  4. day74 bbs项目☞点赞与评论

    目录 一.文章详情展示 1 将侧边栏做成inclusion_tag 二.点赞点踩功能 三.评论功能 整体总结: 在出现bug的时候,先判断是前端bug还是后端bug,再判断bug错误类型,以及报错信息 ...

  5. day14 参数

    目录 一.参数介绍 二.形参与实参的具体使用 2.1位置参数 2.2关键字参数 2.3关键字实参和位置实参混合使用时 2.4默认参数 2.5位置形参和默认形参混用 2.6 可变长度的参数(*与**用法 ...

  6. 大型Java进阶专题(七) 设计模式之委派模式与策略模式

    前言 ​ 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...

  7. 521我发誓读完本文,再也不会担心Spring配置类问题了

    当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  8. Python3笔记027 - 6.2 参数传递

    第6章 函数 6.2 参数传递 在理解形参和实参的基础上,理解位置参数.关键字参数.可变参数这三种情形,以及这三种的混合情形. 6.2.1 形式参数和实际参数 形式参数:在定义函数时,函数名后面括号中 ...

  9. CTF_show平台 web题解 part1

    web3 题目描述: 方法一:RFI 使用url实现php远程文件包含 在服务器上构造1.txt <?php $a = "<?php eval(\$_POST['123'])?& ...

  10. 05 flask源码剖析之配置加载

    05 Flask源码之:配置加载 目录 05 Flask源码之:配置加载 1.加载配置文件 2.app.config源码分析 3.from_object源码分析 4. 总结 1.加载配置文件 from ...