PHP基础知识(面试题+复习)

PHP 语言编程基础

1.require() 和 require_once() 之间的主要区别是?

1:PHP require() 函数:PHP 中的 require() 函数主要用于将一个 PHP 文件的代码/数据包含到另一个文件中。在此过程中,如果出现任何类型的错误,则此 require() 函数将显示警告以及致命错误,该错误将立即停止脚本的执行。
为了使用这个 require() 函数,我们首先需要创建两个 PHP 文件。使用 include() 函数将一个 PHP 文件包含到另一个文件中。两个 PHP 文件合并为一个 HTML 文件。这个 require() 函数不会查看之前代码是否包含在指定的文件中,而是会在 require() 函数的使用次数中包含代码。
2:PHP require_once() 函数:PHP 中的 require_once() 函数用于将一个 PHP 文件包含到另一个 PHP 文件中。它为我们提供了一个函数,如果 PHP 文件中的代码已经包含在指定文件中,那么如果我们使用 require_once() 函数,它将不会再次包含该代码。这意味着这个函数只会将一个文件添加到另一个文件中一次。
如果此函数没有找到指定的文件,则会产生致命错误并立即停止执行。

2. PHP 中传值与传引用的区别 ?

PHP 按值传递:函数范围内对值的任何改变在函数外部都会被忽略
PHP 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。(优缺点会考到)

3. 如何通过引用传递变量?

为了能够通过引用传递变量,我们在变量前面使用了 & 符号,如下所示KaTeX parse error: Expected 'EOF', got '&' at position 6: var1=&̲var2

4. PHP中如何使用三元条件运算符?

它由三个表达式组成:一个条件和两个操作数,它们描述在指定条件为true或false时应执行的指令,如下所示:
Expression_1?Expression_2 : Expression_3;

5. 列举PHP 数组相关的函数?

array()----创建数组
array_combine()----通过合并两个数组来创建一个新数组
range()----创建并返回一个包含指定范围的元素的数组
compact()----建立一个数组
array_chunk()----将一个数组分割成多个
array_merge()----把两个或多个数组合并成一个数组
array_slice()----在数组中根据条件取出一段值
array_diff()----返回两个数组的差集数组
array_intersect()----计算数组的交集
array_search()----在数组中搜索给定的值
array_splice()----移除数组的一部分且替代它
array_key_exists()----判断某个数组中是否存在指定的key
shuffle()----把数组中的元素按随机顺序重新排列
array_flip()----交换数组中的键和值
array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回
array_unique()----移除数组中重复的值

6. PHP include和require的区别?

require:出现错误后直接终止退出,程序不再执行
include:包含一个不存在的文件,会提示警告程序会继续执行

7. unlink() 函数的作用是?unset() 函数的作用是 ?

unlink() 函数用于删除文件。若成功,则返回 true,失败则返回false.
PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是手册中也明确说了,unset()函数不能销毁全局变量

8. PHP isset() 和 empty() 区别?

Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。

9. 简述echo(),print(),print_r()的区别?

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串

10. PHP array+array与array_merge()的区别?

二者之间的区别是:
1 键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)
2 键名为字符时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值

11. PHP魔幻(术)方法?

__construct() 实例化类实自动调用
——destruct() 类对象使用结束时自动调用
__set() 在给未定义的属性赋值时调用
__get() 调用未定义的属性时调用哦
__isset() 使用isset()或empty()函数的时候调用
__unset() 使用unset()函数的时候调用
__sleep() 使用serialize序列化的时候调用
__wakeup() 使用unserialize()反序列化的时候调用
__call() 调用一个不存在的方法时调用
__callStatic() 调用一个不存在的静态方法时调用
__toString() 把对象转换Wie字符串的是调用,比如echo
__clone() 当使用clone复制一个对象时候调用。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数

12. 简述$GLOBALS是什么意思?

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

13.for 和 foreach 有什么区别?

for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。
foreach不可以删除/修改集合元素,而for可以
foreach和for都可以修改元素里面的属性

14.PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符

15.PHP如何解决异常处理?

抛出异常:使用try…catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会 抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。
解决异常:使用set_error_handler函数获取异常(也可以使用try()和catch()函数),然后使用set_exception_handler()函数设置默认的异常处理程序,register_shutdown_function()函数来执行,执行机制是,php要把调入的函数调入到内存,当页面所有的php语句都执行完成时,再调用此函数

16.如何在PHP中强制转换类型?

输出类型的名称必须在要强制转换的变量前的括号中指定,如下所示:
(int), (integer) - 强制转换为整型
(bool), (boolean) - 强制转换为布尔值
(float), (double), (real) - 强制转换为浮点型
(string) - 强制转换为字符串
(array) - 强制转换为数组
(object) - 强制转换为对象

17. 简述 PHP 可变函数 ?

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
了解了这个概念以后那么上述程序就可以讲的通了。$isPage 在程序运行中,替换为 get, 而 KaTeX parse error: Undefined control sequence: \n at position 73: …echo "In foo() \̲n̲"; } function b…arg = ‘’) {
echo “In bar(); argument was ‘$arg’.
\n”;
}
$func = ‘foo’;
$func(); // 执行 foo(); 命令行中输出:In foo()
$func = ‘bar’;
$func(‘test’); // 执行 bar();命令行中输出:In bar(); argument was ‘test’.
可变函数的语法来调用一个对象的方法。
class Foo
{
function Variable()
{
$name = ‘Bar’;
t h i s − > this-> this>name(); // This calls the Bar() method
}
function Bar()
{
echo “This is Bar”;
}
}
$foo = new Foo();
$funcname = “Variable”;
f o o − > foo-> foo>funcname(); // This calls $foo->Variable()
// 命令行执行输出: This is Bar
当调用静态方法时,函数调用要比静态属性优先。Variable 方法和静态属性示例。
class Foo
{
static KaTeX parse error: Expected 'EOF', got '}' at position 93: …ble called'; } }̲ echo Foo::variable; // This prints ‘static property’. It does need a $variable in this scope.
v a r i a b l e = " V a r i a b l e " ; F o o : : variable = "Variable"; Foo:: variable="Variable";Foo::variable(); // This calls $foo->Variable() reading $variable in this scope

18.PHP嵌套函数 ?

PHP很早就支持嵌套函数了。并是不PHP5.3有闭包时才有的。然而,它却不是象JS,AS那样的闭包嵌套。即它的嵌套函数根本无闭包模式的逃脱。
PHP嵌套函数有一些特别之处。最特别的是,当外部函数被调用时,内部函数就会自动进入全局域中,成为新的定义函数。
所以,当外部函数确保是被调用一次,不会被调用二次,那么,可以写嵌套函数在其中。否则,就会引发致命错误。
但若我们仍想在一个可被调用多次的函数中定义一个内部函数,那么,该如何处理?
我们象在全局定义函数一样使用:
if (!function_exists(‘你的函数名’)){
}
因此,全局函数的使用,常常用于一些特别的目的。同时要清楚,这样的函数,实际就是定义的全局函数。因此,它没有类对它封装,更没有命名空间。

19.PHP处理字符串的常用函数?

(1)trim() 移除字符串两侧的空白字符和其他字符;
(2)strlen() 获取字符串的长度
(3)mb_strlen() 获取字符串长度(可指定字符编码,对中文字符串计算长度)
(4)substr()返回字符串的一部分;
(5)str_replace() 子字符串替换
(6)str_repeat () 重复一个字符串
(7)is_string() 检测变量是否是字符串;
(8)str_shuffle () 随机打乱一个字符串
(9)sprintf() 返回根据格式化字符串生成的字符串(通常用于获取分表后的数据表名)
(10)strstr() 查找字符串的首次出现
(11)addslashes 使用反斜线引用字符串

20.PHP处理数组的常用函数 ?

(1)array() 创建数组
(2)in_array() 判断元素是否在数组中
(3)count() 返回数组中元素的数目
(4)array_merge() 将多个数组合并成一个数组
(5)array_diff() 比较两个或两个以上数组的差异
(6)array_intersect() 获取两个或两个数组以上的交集
(7)array_keys() 获取数组的key列表
(8)array_values() 获取数组的值列表
(9)array_unique() 删除数组中的重复值
(10)array_push()将一个或多个元素插入数组的末尾(入栈)
(11)array_pop() 弹出并返回 array 数组的最后一个单元(出栈)
(12)array_walk() 使用用户自定义函数对数组中的每个元素做回调处理

21.PHP处理时间的常用函数?

(1)date() 格式化一个本地时间/日期。
(2)getdate() 取得日期/时间信息。
(3)date_default_timezone_set() 设定默认时区。
(4)date_default_timezone_get() 返回默认时区。
(5)mktime() 返回一个日期的 Unix时间戳。
(6)strtotime() 将任何字符串的日期时间描述解析为 Unix 时间戳
(7)strftime() 根据区域设置格式化本地时间/日期

23.PHP操作文件的常用函数?

(1)打开文件 fopen()
(2)读取文件 fgets() ; 注:file_get_contents()也是读取文件
(3)写入文件fwrite() ; 注:file_put_contents()同样可以写入文件
(4)关闭文件句柄 fclose()
(5)移动 / 重命名文件 rename()
(6)复制文件 copy()
(7)创建文件 vim 或 touch
(8)删除文件 unlink()
(9)获取文件上次访问的时间 fileatime()
(10)获取文件上次修改的时间 filemtime()
(11)获取文件大小 filesize()
(12)获取文件类型 filetype()
(13)获取文件详细信息 state()
(14)判断是否是目录 is_dir()

24.PHP操作目录(文件夹)的常用函数?

(1)打开目录 opendir()
(2)读取目录 readdir()
(3)删除目录 rmdir()
(4)关闭目录句柄 closedir()
(5)创建目录 mkdir()
(6)返回路径中的目录部分 dirname()
(7)取得当前工作目录 getcwd()
(8)列出指定路径中的文件和目录 scandir()

25.什么是时间戳?时间戳能代表的最小年份和最大年份是多少?

(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合
32 位有符号整数的最小值和最大值)。
不过在 PHP 5.1 之前此范围在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。

26.ini_set () 有什么用处 ?

PHP 允许用户使用 ini_set () 修改 php.ini 中提到的一些设置。此函数需要两个字符串参数。第一个是要修改的设置的名称,第二个是要分配给它的新值。
给定的代码行将启用脚本的 display_error 设置 (如果它被禁用)。
ini_set(‘display_errors’, ‘1’);
我们需要将上面的语句放在脚本的顶部,以便该设置一直保持启用状态,直到最后。此外,通过 ini_set () 设置的值仅适用于当前脚本。此后,PHP 将开始使用 php.ini 中的原始值。

27.const 和 define主要区别 ?

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()—— 这仅仅是为了可读性!

28.在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?

urlencode()

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值