前19节面向对象主要的知识已介绍完,这一节再做些零碎的知识介绍:
__CLASS__,:获取其所在的类的类名。
__METHOD__:获取其所在的方法的方法名。
函数get_class()也可以得到类名,但其必须有个“对象”。
有关类和对象的系统函数:
class_exists(), :判断某个类是否存在(定义过)
interface_exists(), :判断接口是否存在
get_class():获取某个对象的“所属类名”
get_parent_class(), :获取某个对象的“所属父类的类名”
get_class_methods(), :获取一个类的所有方法,返回一个索引数组,就是这些方法的名字。
get_class_vars(), :获取一个类的所有属性,返回一个数组,下标为属性名,值为属性值。
get_declared_classes():获得所有声明过的类(含系统中的类)
is_object():判断是否对象
get_object_vars():获得对象的所有属性,返回一个数组,下标为属性名,值为属性值
对象的运算符:
对象的运算符就两个,一个是“new”,这个我们用的太熟悉了。
还有一个:“instanceof”——判断一个对象是否是某个类的“实例”
注: instanceof Closure判断是不是闭包。《php中`Closure`和`Callable`的区别》
对象比较:
当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
面试的时候,一说起面向对象,经常会问面向对象的三大思想特征是什么?
其实我们都已学过了:封装、继承、多态。
封装:
封装最好理解了,就是把数据“封闭”起来,尽量不给别人看到。
面向对象的基本语法“类的定义”形式,可以认为是最基本封装——封装了很多数据到某个类(对象)。
更严格(更常说)的封装,是尽量将属性或方法做出“私有的”——并通过公开的方法来向外提供对该属性或方法的“可控性操作”:
封装指的就是对类成员设置访问修饰符。
继承:
继承也是很重要的特征,前面我们讲了好多示例。
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
在某些 OOP 语言中,一个子类可以继承多个基类。但是在PHP中,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现,或者使用traits新特性。
多态:
多态:看起来用的是相同的东西(方法),但会得到不同的结果。
通常是指:一个对象可以使用相同的方法(动作)但得到不同的结果:
(这里是其他常见面向对象语法示例:)
class A{
function f1($x ){....做事情1;。。。。}
function f1($x, $y ){....做事情2;。。。。}
function f1($x, $y, $z ){....做事情3;。。。。}
}
也指:不同的对象使用相同的方法,但得到不同的结果。
多态指的就是类的重写与重载。
在C++中,多态专指的是重写,因为它的多态成立条件之一必须要有继承。