我遇到过的面试题及答案(一)

1、<?php echo count(strlen(“”)); ?>的执行结果是?

答案:1

讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。

 

2、请说明php.ini中的safe_mode开启之后影响了哪些函数?

答案:Safe_mode是php的安全模式。开启之后,主要会对系统操作、文件、权限设置等方法产生影响,主要用来应对webshell。以下是受到影响的一些函数:ckdir,move_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以上版本,则将此特性完全去除了。

 

3、php5中魔术方法有哪几个?请举例说明各自的用法。

__construct() :构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称

__destruct() :析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源。

析构函数允许你在使用一个对象之后执行任意代码来清除内存。

当PHP决定你的脚本不再与对象相关时,析构函数将被调用。

在一个函数的命名空间内,这会发生在函数return的时候。

对于全局变量,这发生于脚本结束的时候。

如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值。

通常将变量赋值勤为NULL或者调用unset

__call() :调用对象不存在得方法时执行此函数。包括没有权限访问的方法

__get() :当调用一个未定义的属性时访问此方法

__set( $property, $value ) :给一个未定义的属性赋值时调用

__isset() : 当在一个未定义的属性上调用isset()函数时调用此方法

__unset() :当在一个未定义的属性上调用unset()函数时调用此方法

__toString() :toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时
  如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in
  此方法必须返回一个字符串

__clone() :克隆对象时执行此函数。PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法。如果在对象复制需要执行某些初始化操作,可以在__clone方法实现

__autoload() :它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。

__sleep() :serialize之前被调用,可以指定要序列化的对象属性。

__wakeup :unserialize之前被调用,可以执行对象的初始化工作。

__set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值(自PHP 5.1.0起有效)。

__invoke() :将对象当作函数来使用时执行此方法,通常不推荐这样做。

__callStatic它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用

PHP5.3.0以上版本有效。

它必须是公共的,并且必须被声明为静态的。

同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。

 

4、说几个常用的超全局变量。

$_GET ----->get传送方式

$_POST ----->post传送方式

$_REQUEST ----->可以接收到get和post两种方式的值

$GLOBALS ----->所有的变量都放在里面

$_FILES ----->上传文件使用

$_SERVER ----->系统环境变量

$_SESSION ----->会话控制的时候会用到

$_COOKIE ----->会话控制的时候会用到

 

5、说几个你知道的设计模式。

单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfpw.html