1.面向对象【一种编程思想,并不表示比面向过程天生高端,实质上是一种更好扩展维护的编程思想】 【编程思想本身没有高下之分,但是会有个选择的过程】
面向过程:将一个业务逻辑拆分成各个过程,分别实现各个过程,从而实现业务逻辑的思想就是面向过程。 【面向过程的问题:对业务整体逻辑的抽象化一直存在。面向过程是一个动作的罗列。但是面向对象则是主体的描述。所以面向过程不可能完全描述业务逻辑】 实质上面向对象更加切合现实生活【通过主体的控制】 以上是本质上的区别和选择。【如何为了切合现实生活的话,面向过程需要重复定义太多的主体。这也是面向对象冗余的原因】
所以面向对象是一种希望计算机更好的模拟现实的一种编程思想【而且因为主体进行模拟逻辑,所以好处就在于针对每一个对象进行模块然后分别进行调用业务,从而实现更好的分离和模块】 所以面向对象是解决复杂逻辑和项目的唯一出路。 【这才是面向对象重要的原因:将现实的实体隐射到计算机编程语言中,就是面向对象的实践】
2.基本语法 对象对应于现实实体在计算机中的一个抽象。 对象通过类实例化来实现【对象的来源】 类是一类事物的抽象【因为对象很少出现孤立的形象,都是基于一类型事物的特例(重写类中属性的对象)或者实例(单纯实例)就是对象】
语法: 首先声明一个类 class 类名{}//在定义类时使用属性和方法进行控制【成员】 对象 = new 类名;//实现实例化,输出之后只有属性列表,没有方法的信息【不论可见性】 //每次实例化一次类,都会创建一个对象(会开辟一个新的空间来保存该对象,所以不同的实例对象之间的操作互不影响)(在输出对象var_dump会输出对象的不同) //针对对象的操作才是主体的操作【也是面向对象的主要编程】【由于有需要针对对象的操作,所以需要使用对象成员的访问:访问关键(可见性和访问的不同方式)】
【在类外进行成员的访问】 访问属性:对象->属性名; 访问方法:对象->方法名(); 【如何在类中的方法中访问这个对象的成员】 this关键字来指代当前对象才能够访问该成员【因为在类中的方法中也是局部作用域】 $this->成员;//$this本身也是一个局部作用域变量,但是php机制会将this指代到执行该方法调用的对象 【在方法内调用了对象的成员并且改变之后,会在整个对象存活期间内都是全局作用(只要调用该值,该值便显示改变之后的)。因为对象的属性在对象上时全局的作用】 【正是因为这样的机制,使得面向对象编程在处理数据方面能够更好的模拟现实中的主体】【重点】
类中成员的可见性【public/protected/private】
【这是基本的面向对象的概念】
3.构造函数【__construct】 【实例化类时被调用】 对象的初始化【将对象的属性进行初始化工作】 用于每一个类中的属性公共要使用的情况进行初始化,省去很多工作。【但是不能滥用】 【在对象中作为标记】【或者公共使用的数据才会被放在构造函数中进行初始化】 【这里的初始化工作需要的参数是在实例化过程中使用new关键字时传入相关参数进行实例化即可。构造函数的初始化工作就针对这些参数处理即可】
其余的类中所需的属性只需要在该类中进行定义即可【而不是定义在构造函数中】
另外在类中方法名和类名一样的方法也起构造方法的作用 【但是优先级有问题。两种情况都存在时,构造函数还是使用__construct进行构造函数的作用。有可能出现冲突(完全杜绝在类中使用与类名一致的方法)】
【现实中的实例】 构造函数在公司的实例中只是用于初始化相关城市的信息【其余关于缓存等属性都放在父类中,用于子类继承】
4.析构函数【__destruct】 【对象销毁时进行调用该方法】 对象被销毁【unset】之后,其实对象占用的资源没有被销毁。所以析构函数被用来销毁额外的资源。【节省资源】 但是销毁对象的这个操作本身就不太被使用。
对象被销毁的时机: (1)用户脚本结束后,所有的资源包括对象会被销毁【此时会触发,但是没有意义】 (2)unset对象 (3)将保存当前对象的变量赋值能其他值【也会触发】(即使是重新赋值本身对象也会触发)
【问题】 是否是因为mysql连接这样的资源能够保留下来,所以单例的模式的应用场景?
已经解决:
单例的实现场景就是针对面向对象中组织一个脚本中的多个引入情形时,会带来对数据库的重复实例化【因为我们即使在现实工作中,也是有出现过遇到取用数据时,就进行一次实例化的操作(在compontent中经常会在一个方法中实例多个接口,也是这个问题)】
现实中的单例模式,需要使用的就是针对一个脚本进程中可以进行共享static属性进行连接判断是否是实例对象,如果不是,则进行创建
以上就是单例的实现逻辑