1.抽象
抽象就是忽略一个问题中与当前目标无关的那些方面,以便更充分的注意与当前目标有关的部分,抽象不打算了解问题的全部,而是只选择其中的一个部分,抽象包括两个方面:过程抽象和数据抽象。提示:想一想物理中的质点的概念,你就清楚了。
2.封装
####就是把过程和数据包围起来,对数据的访问只能通过已定义的界面(也就会牵涉到下面要谈到的接口的概念)
举例
####比如相思鸟和乌鸦,我们在抽象时,我们忽略它们嘴的不一样,而我们只在意它们都是有嘴的:mouth;我们忽略它们羽毛颜色的不一样,而只在意它们的羽毛是有颜色的:color;然后我们抽象出嘴、羽毛颜色等特点。然后我们通过抽象出的这些特点,将它们封装成鸟类Bird,这就是封装。在使用时,我们会通过封装出的Bird类来给鸟类的属性赋值,比如bird.mouth1=尖嘴,bird.mouth2=圆嘴,这样我们又还原出鸟类的不同的特点,这正印证了那句话“抽象让我们忽略细节,在不同的层次上处理细节,封装则是填补了抽象留下的空白”
作者:Michael
链接:https://www.zhihu.com/question/20266563/answer/63441258
来源:知乎
###3. 接口
简单来说就是函数。比如你写了一个库,里面有很多函数,如果别人要使用你这个库,但是**并不知道每个函数内部是怎么实现的。使用的人也就只是知道这个函数的入口参数和返回值或者这个函数是做什么的。**对于用户来说 ,你的这些函数就是API,即接口
4.对象
对象是具有具体属性值的一个个体,是***具体***的
5.类
类是一个模板,它描述***一类对象*** 的行为和状态,是抽象的
举例:学生student就是一个类,通常有姓名,性别,年龄,学号等等属性。而具体到某一学生,比如student png,他的属性分别为张三,男,21,1234等等,这个png就是一个对象。
6. 面向对象三大特征解读
####1.封装:如上所述
####2.继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。举例:有A和B,突然有一天你发现,他们是C 族的人。那么你就可以用对待C族人的方法来对待A和B。
####3.多态 :允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
7.命名空间:
1.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
2.命名空间用来解决什么问题?
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
- 1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。下面是一个说明 PHP 命名空间语法的示例:
Example #1 命名空间语法示例
<?php
namespace my\name; // 参考 "定义命名空间" 小节
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass; // 参考 "全局空间" 小节
$a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节
$d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // 参考 "命名空间和动态语言特征" 小节
?>