一、什么是面向对象?(理解着回答)php
面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等经过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。html
面向对象有三大特征:封装性、继承性、多态性。laravel
如今纯正的OO语言主要是 Java 和 C#,PHP、C++也支持OO,C是面向过程的。sql
二、简述 private、 protected、 public修饰符的访问权限。shell
private : 私有成员, 在类的内部才能够访问。编程
protected : 保护成员,该类内部和继承类中能够访问。数组
public : 公共成员,彻底公开,没有访问限制。服务器
三、堆和栈的区别?架构
栈是编译期间就分配好的内存空间,所以你的代码中必须就栈的大小有明确的定义;并发
堆是程序运行期间动态分配的内存空间,你能够根据程序的运行状况肯定要分配的堆内存的大小。
四、XML 与 HTML 的主要区别
语法要求不一样:
(1)在html中不区分大小写,在xml中严格区分。
(2)在HTML中,有时不严格,若是上下文清楚地显示出段落或者列表键在何处结尾,那么你能够省略或者之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。
(3) 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符做为结尾。这样分析器就知道不用查找结束标记了。
(4)在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
(5)在HTML中,能够拥有不带值的属性名。在XML中,全部的属性都必须带有相应的值。
(6) 在XML文档中,空白部分不会被解析器自动删除;可是html是过滤掉空格的。
标记不一样:
(1)html使用固有的标记;而xml没有固有的标记。
(2)Html标签是预约义的;XML标签是免费的、自定义的、可扩展的。
做用不一样:
(1)html是用来显示数据的;xml是用来描述数据、存放数据的,因此能够做为持久化的介质!Html将数据和显示结合在一块儿,在页面中把这数据显示出来;xml则将数据和显示分开。 XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。
(2)xml不是HTML的替代品,xml和html是两种不一样用途的语言。 XML 不是要替换 HTML;实际上XML 能够视做对 HTML 的补充。XML 和HTML 的目标不一样HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容。
(3)对于XML最好的形容多是: XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。
(4)XML将来将会无所不在。XML将成为最广泛的数据处理和数据传输的工具。
五、面向对象的特征有哪些方面?
主要有封装,继承,多态。若是是4个方面则加上:抽象。
封装:
封装是保证软件部件具备优良的模块性的基础,封装的目标就是要实现软件部件的高内聚,低耦合,防止程序相互依赖性而带来的变更影响.
继承:
在定义和实现一个类的时候,能够在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容做为本身的内容,并能够加入若干新的内容,或修改原来的方法使之更适合特殊的须要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提升了软件的可重用性和可扩展性。
多态:
多态是指程序中定义的引用变量所指向的具体类型和经过该引用变量发出的方法调用在编程时并不肯定,而是在程序运行期间才肯定,即一个引用变量倒底会指向哪一个类的实例对象,该引用变量发出的方法调用究竟是哪一个类中实现的方法,必须在由程序运行期间才能决定。
抽象:
抽象就是找出一些事物的类似和共性之处,而后将这些事物归为一个类,这个类只考虑这些事物的类似和共性之处,而且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你可以想象出它们的相同之处,那就是抽象。
六、抽象类和接口的概念以及区别?
抽象类:它是一种特殊的,不能被实例化的类,只能做为其余类的父类使用。使用abstract关键字声明。
接口:它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。
区别:
(1)抽象类的操做经过继承关键字extends实现,而接口的使用是经过implements关键字来实现。
(2)抽象类中有数据成员,能够实现数据的封装,可是接口没有数据成员。
(3)抽象类中能够有构造方法,可是接口没有构造方法。
(4)抽象类的方法能够经过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。
(5)一个类只能继承于一个抽象类,而一个类能够同时实现多个接口。
(6)抽象类中能够有成员方法的实现代码,而接口中不能够有成员方法的实现代码。
七、什么是构造函数,什么是析构函数,做用是什么?
构造函数(方法)是对象建立完成后第一个被对象自动调用的方法。它存在于每一个声明的类中,是一个特殊的成员方法。做用是执行一些初始化的任务。Php中使用__construct()声明构造方法,而且只能声明一个。
析构函数(方法)做用和构造方法正好相反,是对象被销毁以前最后一个被对象自动调用的方法。是PHP5中新添加的内容做用是用于实如今销毁一个对象以前执行一些特定的操做,诸如关闭文件和释放内存等。
八、如何重载父类的方法,举例说明
重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。
覆盖父类方法的关键是在子类中建立于父类中相同的方法包括方法的名称、参数和返回值类型。PHP中只要求方法的名称相同便可。
九、经常使用的魔术方法有哪些?举例说明
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复制一个对象时候调用。
十、$this和self、parent这三个关键词分别表明什么?在哪些场合下使用?
$this 当前对象
self 当前类
parent 当前类的父类
$this在当前类中使用,使用->调用属性和方法。
self也在当前类中使用,不过须要使用::调用。
parent在类中使用。
十一、类中如何定义常量、如何类中调用常量、如何在类外调用常量。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字const.
例如:const PI = 3.1415326;
不管是类内仍是类外,常量的访问和变量是不同的,常量不须要实例化对象,
访问常量的格式都是类名加做用域操做符号(双冒号)来调用。
即:类名 :: 类常量名;
十二、做用域操做符::如何使用?都在哪些场合下使用?
(1)调用类常量
(2)调用静态方法(使用static修饰的类方法)
1三、__autoload()方法的工做原理是什么?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,若是在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后
执行include或者require来载入该类,而后程序继续执行,若是这个路径下不存在该文件时就提示错误。
使用自动载入的魔术函数能够没必要要写不少个include或者require函数。
好了各位,以上就是这篇文章的所有内容了,能看到这里的人呀,都是人才。以前说过,PHP方面的技术点不少,也是由于太多了,实在是写不过来,写过来了你们也不会看的太多,因此我这里把它整理成了PDF和文档,若是有须要的能够
更多学习内容能够访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)
以上内容但愿帮助到你们,不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们,须要的能够加入个人 PHP技术交流群