基础很重要,每天发5道基础题,每天利用空闲的5-10分钟,认真的阅读一下,让你们知道有这个知识点,有必要的话,给自己打个为什么,扩展一下知识内容,与大家互动起来。
基础很重要,有兴趣的可以一起学习。
以下是71-75题,说白了,以下题目就让你知道有这个知识点,详细内容自己可扩展。。。
71. 什么是魔术方法?常用的魔术方法有哪几个?(重点)
以__开头的系统自定义的方法。
__construct()
__destruct()
__autoload()
__call()
__tostring()
72. 什么是构造方法和析构方法?
构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造方法。
如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数,
没有任何操作。
构造方法的格式如下:
function __construct(){}
或者:function 类名(){}
构造方法可以没有参数,也可以有多个参数。
析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
析构方法的定义方法为:__destruct();
因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创建析构方法。
73. __autoload()方法的工作原理是什么?(重点)
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。
74. 什么是抽象类和接口?抽象类和接口有什么不同和相似的地方?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。
抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
因为php中只支持单继承,如果想实现多重继承,就要使用接口。也就是说子类可以实现多个接口。
接口类是通过interface关键字来声明的,接口类中的成员变量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
抽象类至少有一个抽象方法吗?
答:如果一个类声明成抽象类,里面可以没有抽象方法
如果一个类中有抽象方法,这个类必须是抽象类
75. __call的参数有几个,类型是什么,意义是什么?
魔术方法__call()的作用是当程序调用一个不存在或不可见的成员方法时,php会先调用__call()方法,
将那个不存在的方法的方法名和参数都存储下来。
__call()包含两个参数, 第一个参数是那个不存在的方法的方法名,是个字符串类型;
第二个参数是那个不存在的方法的所有参数,是个数组类型。
本人认为__call()方法的意义更多在于调试,可以定位到错误。同时可以捕捉异常,如果某个方法不存在,
则执行其它可替代方法。
以下是视频教程分享
领取专属 10元无门槛券
私享最新 技术干货