首页 > 代码库 > php面向对象、语法【访问成员的情形:外和方法内调用对象的关键字this】、构造函数的场景和析构函数的场景
php面向对象、语法【访问成员的情形:外和方法内调用对象的关键字this】、构造函数的场景和析构函数的场景
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连接这样的资源能够保留下来,所以单例的模式的应用场景?
php面向对象、语法【访问成员的情形:外和方法内调用对象的关键字this】、构造函数的场景和析构函数的场景