PHP面试题大全(值得收藏)
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。 多态: 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。 抽象: 抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。 6、抽象类和接口的概念以及区别? 抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用abstract关键字声明。 接口:它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。 区别: (1)抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现。 (2)抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。 (3)抽象类中可以有构造方法,但是接口没有构造方法。 (4)抽象类的方法可以通过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。 (5)一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。 (6)抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。 7、什么是构造函数,什么是析构函数,作用是什么? 构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。 析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。 8、如何重载父类的方法,举例说明 重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。 覆盖父类方法的关键是在子类中创建于父类中相同的方法包括方法的名称、参数和返回值类型。PHP中只要求方法的名称相同即可。 9、常用的魔术方法有哪些?举例说明 php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。 __construct() 实例化类时自动调用。 __destruct() 类对象使用结束时自动调用。 __set() 在给未定义的属性赋值的时候调用。 __get() 调用未定义的属性时候调用。 __isset() 使用isset()或empty()函数时候会调用。 __unset() 使用unset()时候会调用。 __sleep() 使用serialize序列化时候调用。 __wakeup() 使用unserialize反序列化的时候调用。 __call() 调用一个不存在的方法的时候调用。 __callStatic()调用一个不存在的静态方法是调用。 __toString() 把对象转换成字符串的时候会调用。比如 echo。 __invoke() 当尝试把对象当方法调用时调用。 __set_state() 当使用var_export()函数时候调用。接受一个数组参数。 __clone() 当使用clone复制一个对象时候调用。 10、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用? $this 当前对象 self 当前类 parent 当前类的父类 $this在当前类中使用,使用->调用属性和方法。 self也在当前类中使用,不过需要使用::调用。 parent在类中使用。 11、类中如何定义常量、如何类中调用常量、如何在类外调用常量。 类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。 定义常量使用关键字const. 例如:const PI = 3.1415326; 无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象, 访问常量的格式都是类名加作用域操作符号(双冒号)来调用。 即:类名 :: 类常量名; 12、作用域操作符::如何使用?都在哪些场合下使用? (1)调用类常量 (2)调用静态方法(使用static修饰的类方法) 13、__autoload()方法的工作原理是什么? 使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。 使用自动载入的魔术函数可以不必要写很多个include或者require函数。 四、THINKPHP部分 1、常见的PHP框架 答:thinkPHP、laravel、yii、ci 等。 2、如何理解TP中的单一入口文件? ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的。 入口文件中主要包括: (1)定义框架路径、项目路径和项目名称(可选) (2)定义调试模式和运行模式的相关常量(可选) (3)载入框架入口文件(必须) 3、ThinkPHP中的MVC分层是什么?(理解) MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。ThinkPHP 也是基于MVC设计模式的。MVC只是一个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层大致体现在: 模型(M):模型的定义由Model类来完成。 控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制。 视图(V):由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。 (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |