PHP面试题121-140

  1. 什么是魔术方法?常用的魔术方法有哪几个?(重点)
    以__开头的系统自定义的方法。
    __construct()
    __destruct()
    __autoload()
    __call()
    __tostring()

  2. 什么是构造方法和析构方法?
    构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
    php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造方法。
    如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数,
    没有任何操作。
    构造方法的格式如下:
    function __construct(){}
    或者:function 类名(){}
    构造方法可以没有参数,也可以有多个参数。
    析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
    析构方法的定义方法为:__destruct();
    因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。

  3. __autoload()方法的工作原理是什么?(重点)
    使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
    当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
    这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
    就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
    使用自动载入的魔术函数可以不必要写很多个include或者require函数。

  4. 什么是抽象类和接口?抽象类和接口有什么不同和相似的地方?
    抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。
    抽象类是通过关键字 abstract 来声明的。
    抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
    抽象方法没有方法体,该方法天生就是要被子类重写的。
    抽象方法的格式为:abstract function abstractMethod();

因为php中只支持单继承,如果想实现多重继承,就要使用接口。也就是说子类可以实现多个接口。
接口类是通过interface关键字来声明的,接口类中的成员变量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。

抽象类至少有一个抽象方法吗?
答:如果一个类声明成抽象类,里面可以没有抽象方法
如果一个类中有抽象方法,这个类必须是抽象类

  1. __call的参数有几个,类型是什么,意义是什么?
    魔术方法__call()的作用是当程序调用一个不存在或不可见的成员方法时,php会先调用__call()方法,
    将那个不存在的方法的方法名和参数都存储下来。
    __call()包含两个参数, 第一个参数是那个不存在的方法的方法名,是个字符串类型;
    第二个参数是那个不存在的方法的所有参数,是个数组类型。
    本人认为__call()方法的意义更多在于调试,可以定位到错误。同时可以捕捉异常,如果某个方法不存在,
    则执行其它可替代方法。

  2. smarty模板技术的用途是什么?
    为了php与html分开,美工和程序员各司其职,互不干扰。

  3. smarty配置主要有哪几项?

  4. 引入smarty.class.php;

  5. 实例化smarty对象;

  6. 重新修改默认的模板路径;

  7. 重新修改默认的编译后文件的路径;

  8. 重新修改默认的配置文件的路径;

  9. 重新修改默认的cache的路径。

  10. 可以设置是否开启cache。

  11. 可以设置左侧和右侧定界符。

  1. smarty在使用过程中需要注意哪些细节?
    Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,
    也就是说smarty技术将用户UI与php代码分离开。
    这样程序员和美工各司其职,互不干扰。

smarty运用过程中要注意以下几个问题:
1.正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;
2.php页面中使用assign赋值 和 display显示页面;
3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
A.{}
B. foreach
C. if else
D. include
E. literal

  1. MVC的概念是什么?各层主要做什么工作?
    MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
    M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。
    使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
    在网站开发中,
    模型层一般负责对数据库表信息进行增删改查,
    视图层负责显示页面内容,
    控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,
    执行完毕后由控制器层决定将结果assign到哪个view层。

  2. oop中的多态性跟方法重写有什么关系?
    态性是面向对象编程的一种特性,和方法无关。

简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性)

而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类的方法,即在子类中重写该方法——相同参数,不同实现(动态多态性)

  1. php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解?
    答: php不支持方法的重载,很多书里提到的PHP‘重载’应该是‘重写’

  2. final关键字能定义类中的成员属性吗?
    答:不能,类的成员属性只能有public ,private , protected 来定义

  3. final关键字定义的类能够被继承吗?
    答:final定义的类不能被继承

  4. 说说static关键字的使用场合?static能用在class前吗?
    static可以跟public,protected,private一起使用吗?构造方法可以是static的吗?
    答: static可以在属性和方法前面使用,调用static属性或者方法时,只要将类载入就可用,不用实例化
    static不能用在class的前面
    static可以跟public,protected,private一起使用,在方法的前面;
    ▲构造方法不能是static

  5. 接口可以实例化吗?抽象类能实例化吗?
    答:接口和抽象类都不能被实例化

  6. class前面能加访问修饰符吗?如果能加,只能是哪几个访问修饰符?可以是权限访问修饰符public,protected,private吗?
    答:class前面可以加final,static;
    ★class前面不能加public,protected,private

  7. 类中属性前可以不加访问修饰符吗?成员变量前的修饰符只能是public,protected,private吗?还可以是哪几个?
    答:类中的属性必须加修饰符,除了那3个以外,还可以加var

  8. 如果echo一个数组,页面输出什么?echo一个对象呢?print一个数组或者对象呢?
    答:页面只能输出“Array”;echo一个对象会出现“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33”
    print一个数组时也只是输出“Array”,print一个对象出现“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php ”
    ▲print和echo是一样的

  9. __tostring()魔术方法在什么时候被自动执行? __tostring()魔术方法必须要return返回值吗?
    当echo或者print一个对象时,就是自动触发。而且__tostring()必须要返回一个值

  10. 什么是抽象方法?
    答:在方法前面有abstract,而且方法没有方法体,连“{ }”也不能有

你可能感兴趣的:(PHP面试题121-140)