学习PHP 第五天 PHP对象的高级应用 (抽象与接口),访问修饰符

今天开始学习的是PHP对象有的高级应用,前两天学习过PHP面向对象的一些基础知识,以及抽象类的应用。

    (1), final关键字:final关键字来修饰类的作用是使类不再具有继承性。不能再派生出新的子类。若该final关键字作用于类中的一个方法,则该方法不能被子类继承。

    (2)抽象类:用关键字abstract修饰,只能用作其他类的基类,本身不能被 实例化。该类同同普通类一样,也可以有成员变量和方法,但至少需包含一个方法,不用有方法体。方法的实现只能在子类中完成。

    (3)接口的使用:由于继承只能为单继承,不能有多继承,这个可以用接口interface来实现.

    (4)克隆对象:用关键字clone可以将一个对象$obj1赋给$obj2,$obj2 = clone $obj1。两个对象占用不同的物理空间,如果$obj2 = $obj1,则$obj1,$obj2占用相同的一个物理空间,相当于一个对象对另外一个对象的引用,判断两个对象是引用不是克隆可以用对象比较符==(内容完全相等),===(引用)来得到结果。如果想在被赋值对象$obj2里保留一些不同于赋值对象$obj1的变量,可以__clone()方法。

    (5)对象类型检测instanceof: 可以用instanceof来判断对象$obj是否属于某类或该类的父类,格式如下:

    (6)魔术方法:魔术方法即在一般的方法前有标志__,如前面学习过的构造函数__construct(),析构函数__destruct(),克隆函数__clone(), 这里有我们要提到的新的一引起魔术方法:

__get(),__set()方法:当程序试图调用一个不存在的类的成员变量的时候。PHP会执行该方法。
__call()方法:当程序试图调用一个不存在的类的成员函数的时候。PHP会执行该方法。
__sleep(),__wakeup()方法:当调用serialize()将一个对象进行序列化的时候,如果该对象里包含一个__sleep()函数,则会先执行该__sleep()方法。unserialize()函数可以重新一个还原被序列化了的对象,则会调用__wakeup()函数,用来恢复数可能丢失的数据库连接和相关工作 。但有一个疑问的是该类只能有一个变量才能调的通程序,如果有两个及以上变量的时候,程序会提示出错。
__toString()方法:该方法的作用用来可以将一个对象进行输出,如echo $obj,如果类中没有该方法的时候,则这样的代码会报错误。
__autoload()方法:一般写规范程序的时候,一个独立的类会保存在一个php文件中支,如果在一个新的页面要调用其他类的时候,可以用__autoload()和include_once()方法来一次加入多个类文件
    呵呵,新手上路,请多多指教哈!
————————————————
原文链接:https://blog.csdn.net/combridge320/article/details/5420863


PHP 中接口与继承的定义与区别  接口类和抽象类(都不能直接实例化)

接口与抽象类

一个类可以继承多个接口。。。
一个类只能继承一个抽象类。。

 

接口   接口类不能被实例化,并且属性必须是常量,方法不能有方法体 

接口类不能被实例化,需要一一实现接口定义的所有方法。关键字interface implements,

接口里面定义的所有方法都是空的。且不能实例化,而需要别的类去implements 它,而且必须一一实现接口定义的所有方法,

实际上接口类说白了,就是一个类的模板,一个类的规定,

接口中定义的所有方法都必须是公有,这是接口的特性。

什么时候用接口?

1、定规范,保持统一性;

2、多个平级的类需要去实现同样的方法,只是实现方式不一样

接口使用规范

  • 接口不能实例化
  • 接口的属性必须是常量
  • 接口的方法必须是public【默认public】,且不能有函数体
  • 类必须实现接口的所有方法
  • 一个类可以同时实现多个接口,用逗号隔开
  • 接口可以继承接口【用的少】

--------------------------------------------------------------------------------------------------------------------

抽象类&抽象方法  (只能被继承)(关键字 abstract)(继承关键字extends)

抽象类中也是可以有构造函数的。

具有抽象方法的类为抽象类,抽象类不能实例化,只能继承,

通过extends来实现,抽象类中也可以定义普通方法

父类方法执行方式不确定,但子类还都有这个方法。当父类为抽象类时,子类必须重写父类的抽象方法

抽象类里不一定非要写抽象方法,但有抽象方法的类必须定义为抽象类

抽象类必须继承使用

抽象方法不能有主体即{}

<?php

abstract class AbstractClass

{

   // 强制要求子类定义这些方法

    abstract protected function getValue();

    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)

    public function printOut() {

        print $this->getValue();

    }

}

抽象类中也是可以有构造函数的。虽然抽象类不能实例化,但是抽象类被继承之后,它的派生类可以实例化;而派生类在实例化调用构造函数的时候会先调用基类中的构造函数,所以抽象类的构造函数也是可以被调用的,所以抽象类中可以有构造函数。抽象类的析构函数最后是虚析构函数。

链接一有意思的问题 :PHP抽象构造函数  此问题讨论抽象类的抽象构造函数是子类的构造函数,还是基类构造函数的实现?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值