本文主要阐述面向对象的基本概念,如有问题,还请斧正。
首先说明,涉及的一些知识点,算是提纲吧 。
1 类的基本概念;2 对象的基本概念;3 访问控制;4 构造函数,析构函数;5魔术方法;6 接口;7 多态;8 封装;9继承;10 static与final
一,类的基本概念
1 什么是类? 类即拥有相同属性和行为的一个集合体。举个例子 ,我们日常生活中的车 是一个类,车拥有相同的属性(颜色,大小,重量)和行为(行驶);又如动物也是一个类,动物拥有相同的属性(大小)和行为(吃,喝);我们将这些拥有相同的属性和行为的一些事物叫做一个类。
2 在程序中如何申明一个类,用关键字 class 例
classPerson{//属性;
// 行为;
}
在这里我们申明了一个人类
二 ,对象的基本概念
1 什么是对象? 对象即是一个具体的事物,也或者是一个抽象的事物,对象时从类实例化而来。例: 上面我们说车是一个类,那么宝马,奔驰等就是对象,总结一句,对象就是将类具体化了。
2 对象的两个部分
(1)对象的组成元素,是对象的数据模型,用于描述对象的数据,又别称为属性;
(2)对象的行为,对象的行为模型,用于描述对象具体能做什么事情,又被称为方法;
3 对象的两个特征
(1)高内聚, 即在对象的内部属性和方法对内是可见,在对象的内部属性和方法都是可以被修改和访问的;
(2)低耦合 , 在对象的外部,我们只能看见一部分的方法和属性;涉及到访问控制,后文在述。
4 如何实例化一个对象,用关键字 new 上面我们申明了一个人类,现在我们将这个人类 实例化。
实例化一个张三的对象
$zhangsan = new Person();
三 , 访问控制 :主要用修饰符public protected private 来控制访问的权限; 例
classPerson{public $name; //公有的,可以被任何访问
protected $sex; //受保护的,可以被自身和子类访问
private $age; //私有的,只能被自己访问
}
四, 构造函数,和析构函数
1 构造函数 ,构造函数为类中的一个方法,当我们实例化这个类的时候 自动调用,构造函数的目的是为了完成一些初始化的工作。用__construct 例
classPerson{public $name; //公有的,可以被任何访问
protected $sex; //受保护的,可以被自身和子类访问
private $age; //私有的,只能被自己访问
//当我们new这个类时 自动调用
public function__construct(){echo "你好";
}
}
2 析构函数 ,当对象被销毁的时候自动调用,我们常用析构函数来销毁变量,以达到释放内存的 目的。 用 __desturct 写法同上。
五, 魔术方法,原理和构造函数差不多,在特定的情况下自动调用。
__tostring 当对象被作为字符串使用时,自动调用,返回字符串;
__invote 当对象被作为方法使用时,自动调用;
__call 当对象访问不存在的方法或者未公开的方法是,自动调用,返回被调用的函数名,和参数数组;
__callStatic 当对象访问不存在的静态方法,或者未公开的时候自动调用,返回调用函数名,和参数数组;
__get 对象访问不可访问的属性时候,自动调用,返回不可访问的属性名;
__set 给不可访问的属性赋值时,自动调用,返回属性名,和赋值参数;
__isset 用isset()/empty()检测不可访问的属性时,自动调用,返回检测的属性名;
__unset 用unset()删除不可访问的属性时,自动调用,返回删除属性名;
__clone 使用clone关键字克隆对象时,自动调用,作用是为新的克隆对象赋初始值;
__sleep 对象序列化时,自动调用,返回一个数组,数组中的值就是可以序列化的属性;
__wakeup 对象反序列化时,自动调用,为反序列化新产生的对象,赋初始值;
__autoload 需要在内外部声明函数。当实例一个未申明的类时,自动调用,传递实例化的类名,可以使用类名自动加载对应的类文件;
六,接口
1 什么是接口? 接口提供了一组实现接口的类 必须实现的方法组合 ,接口里面的方法没有方法体(具体的执行代码)接口里面的方法都是抽象方法。
2 如何声明一个接口 例:
interfaceInter {public function eat(); //没有具体的方法体
public functionrun();
}
3 当一个类去实现一个接口的时候 必须实现接口里面的方法,除非这个类时抽象类 例
//申明一个接口
interfaceInter {publicfuntion eat();publicfuntion run();
}//一个类去实现接口
class Person implementsInter{//这个类必须去实现接口中的方法
public functioneat(){//具体的方法
}public functionrun (){//具体的方法
}
}
4 接口可以被继承,用关键字extends 写法 interface inter1 extends Inter { } inter1接口继承了Inter接口,接口的继承可以是一对多,即一个接口可以继承多个父接口。注意:当一个类去实现了一个子接口的时候,它也必须实现父接口里面的抽象方法。
七 ,多态
1 多态是一种现象,当一个类被多个子类所继承,如果这个类中的方法在子类中表现出了不同的功能,我们称这种现象为多态;
八 ,封装
1 封装 通过访问修饰符 将类中不需要外部访问的属性和方法进行私有化处理,实现访问控制,让使用者只能通过我们提供的方法对属性和方法进行访问。
2 封装的好处,可以重复调用避免了代码的冗余。
九 ,继承 类可以被继承,子类拥有父类的属性和方法,子类可以修改父类的成员,我们称之为重写,当子类 重写父类的方法后,按照子类的方法运行 通过关键字extends 实现继承
例子
//声明一个类
classPerson{$name;public functionsay(){echo $this->name."今天天气不错哦"//$this php中的伪变量,代表自身对象我们在类内部访问属性时一般用$this
}
}//继承一个类
class Man extendsPerson{//将父类的say方法重写
public functionsay(){echo "晚饭吃什么?"}
}
十, 关键字 final 和static
1 final php5中引入关键字final 当用final 修饰类的时候这个类可以理解为最终类,这个类不能被继承;当用final修饰方法时,这个方法可以就理解为最终方法,不能够被重写。
2 static 静态成员 //用static 修饰的属性和方法被称为静态属性和静态方法
(1)静态属性保存了公有的数据;
(2)静态方法只能访问静态属性;
(3)静态成员不要要实例化就可以访问,
(4)静态方法不能够去调用非静态成员,然而非静态方法则可以调用静态成员,因为静态成员在加载的时候已经产生,而非静态成员此时没有实例化诞生。
(5)如何访问? 在类内部访问 用 self 或者static访问 格式 : self/static::$属性名 ; parent::$属性名访问父类属性 在类外部调用 : 类名::$属性。
结束语 :以上是关于面向对象编程的一些基本概念,以后闲的时候在弄些其他东西,话说这是在下的第一篇博客,
2018-09-02 21:39:26
原文:https://www.cnblogs.com/jia1001/p/9575486.html