博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类、面向对象、类的继承
阅读量:4957 次
发布时间:2019-06-12

本文共 4705 字,大约阅读时间需要 15 分钟。

类:

它是用于描述“某一些具有共同特征”的物体的概念,是某一类物体的总称。

通常,一个类所具有的共同特征包括2大方面的信息:

外观,形状,描述,数据。。。。。属性

行为,动作,功能。。。。。。。。方法

举例子:

人类;动物类;鸟类

对象:

 

它是指一个具体的“物体”,该物体隶属于某个“类别”(类)。

通常,对象离不开类,没有类,就不能有对象。

//创建类class computer{    //定义属性    var $code ="c1";    var $color ="black";    //定义方法    function show(){        echo "这台电脑型号是:".$this->code."
"."颜色是:".$this->color."
"; }}//创建类的对象$com = new computer();$com->code ="c2";$com->color="中国红";//调用类里面的方法$com->show();$com1 = new computer();//$com1->code="c3";//$com1->color="黄金黄";$com1->show();
案例

创建对象的基本形式:

方式1

$对象名1  =  new  类名(); //对象名就是变量名;类是应该定义过了

 

方式2

$CName = C1;

$person3=new $CName();

方式3

$对象名3 = new  self; //self指代类本身,这行代码只能在类内部方法中使用。

 

方式4

通过对象创建对象 new 对象名;//创建该对象所属类的一个新对象

$person4 = new $person3;

对象的传值:2种

 

值传递: 传递的时候,拷贝的是数据本身。默认都是值传递。

 

结果:传递完之后,有了2份同样的数据,但两个变量“相互独立”没有关系。

 

引用传递传递的时候,拷贝的是引用关系。需要使用”才能实现引用传递。

 

结果:传递完之后,数据仍然只有一份,但是两个变量共同指向该数据。

对象的存储跟普通变量的存储有所区别:

普通变量:

对于对象(变量):

类中的成员:属性、方法、类常量

 定义形式:

形式3:     public  $v1;

形式4:     public   $2 = 2;

 

使用形式:

$对象->属性名;

 

注意:属性名前面没有$符号。

 

方法前可以加修饰词:public, protected,private,省略就算public

 

方法中$this关键字:

 

$this是一个“伪对象”,代表当前所属类的当前对象。

 

一个系统函数:get_class(对象) 

 

作用:获得某个对象的“所属类名”——结果只是一个类名字符串。

 

$class_name = get_class($p1); //结果可能是:”Person”

静态属性:

属性前加关键字:static

静态属性就是:只隶属于类本身——也可以看做是所有对象的“共有数据”。

通过特殊的语法:::双冒号语法,也叫范围解释符)

::$静态属性名

静态方法:

使用方法跟静态属性类似:

类名::静态方法名();

 

注意:$this在静态方法中不能使用。

 

self:

含义:代表当前类

使用:通常只能在某个类的某个方法内部代表该类的名称。

构造方法:

1,该方法名字是固定的,为:_ _construct();注意:两个下划线

2,该方法必须是普通方法(不能是静态方法)

3,通常该方法应该是public

4,通常该方法中使用$this这个关键字来对属性进行赋值

5,当new 类名()的时候,其实是在调用该构造方法

6,如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配

析构方法:

销毁信息:_ _destruct()

1,析构方法通常不太需要去定义。

2,析构方法不能调用。

3,析构方法不能有形参。

4,析构方法中可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。

对象销毁的几个情形:

脚本程序运行结束,自动销毁;

明确地unset()一个对象变量,则被销毁;

改变对象变量的值,被销毁;

 

实际上,更本质来说,当一个对象(new 出来的对象)没有任何一个变量指向它的时候,该对象就会被自动销毁——自然,如果整个程序结束,也会销毁。

类的继承:

含义理解:某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息。(对象的属性多,类的属性最少)

 

Class jizuidongwu{    public $prop1 = "有脊椎";    function show1(){        echo "
特征:" . $this->prop1; }}Class human extends jizuidongwu{ public $prop2 = "两脚走路"; function show2(){ echo "
特征:" . $this->prop1; echo "
特征:" . $this->prop2; }}$person1 = new human();$person1->show2();
例子:

 

基本概念:

继承:一个类从另一个已有的类获得其特性,称为继承。

派生:从一个已有的类产生一个新的类,称为派生。

继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情。

父类/子类:已有类为父类,新建类为子类。父类也叫“基类”,子类也叫“派生类”

单继承:一个类只能从一个上级类继承其特性信息。PHP和大多数面向对象的语言都是单继承模式。C++是多继承。

扩展:在子类中再来定义自己的一些新的特有的特性信息(属性,方法和常量)。没有扩展,继承也就没有意义了

访问(权限)修饰符:

在类中的成员,通常都可以在前面加上以下3个修饰符:

public:公共的,共有的,公开的

protected:受保护的

private:私有的,

public公有的:

 

语法模式:

 

对象->成员;

 

类名::成员;

 

访问位置分为3个:

 

1:某个类内部:自然是该类的某个方法中

 

2:某个类的具有继承关系的子(父)类的内部:是指其他类的某个方法中。

 

3,某个类的外部:一般就是独立的代码区(不在类中),类似我们之前的代码。

 

class C{    public $p1 = 1;    public function showInfo(){        echo "
属性p1=" . $this->p1; echo "
属性p2=" . $this->p2;//此时可以访问下级的$p2(但很不常用) }}class D extends C{ public $p2 = 2; public function showInfo2(){ echo "
属性p1=" . $this->p1;//访问的是上级的$p1(常见情形) echo "
属性p2=" . $this->p2; }}$d1 = new D();$d1->showInfo2();echo "
在类外p2=" . $d1->p2;$d1->showInfo();
代码演示

 

protected 受保护的:

 

protected修饰的成员,可以在当前类或当前类的上下级具有继承关系的类中访问。

 

class C{    protected $p1 = 1;    public function showInfo(){        echo "
属性p1=" . $this->p1; }}class D extends C{ protected $p2 = 2; public function showInfo2(){ echo "
属性p1=" . $this->p1;//访问的是上级的受保护成员$p1 echo "
属性p2=" . $this->p2;//访问的是自己的受保护成员$p1 }}$d1 = new D();$d1->showInfo2();echo "
在类外p2=" . $d1->p2;//这一行出错,因为在“外面”不能访问受保护成员$p2
代码演示

 

private私有的:

private 修饰的成员,只能在其所在的类中访问。

 

class C{    private $p1 = 1;    public function showInfo(){        echo "
属性p1=" . $this->p1; }}class D extends C{ private $p2 = 2; public function showInfo2(){ echo "
属性p1=" . $this->p1;//访问的是上级的似有成员$p1 echo "
属性p2=" . $this->p2;//访问的是自己的私有成员$p1 }}$d1 = new D();$d1->showInfo2();echo "
在类外p2=" . $d1->p2;//这一行出错,因为在“外面”不能访问私有成员$p2
代码

 

访问修饰限定符的总结:

范围

本类内

继承关系类内

类外

public

可以

可以

可以

protected

可以

可以

不可以

private

可以

不可以

不可以

 

 parent代表父类:

 

对比:self代表“本类”(自己当前类)

 

parent通常用于在子类中调用父类的成员的时候使用,多数通常就是使用父类的“静态类”成员。

 

——因为parent代表的类,而非对象。

class C{    public $p1 = 1;    function showMe(){        echo "
我是父类,数据有:"; echo "
C中p1=" . $this->p1; } function __construct($p1){ $this->p1 = $p1; }}class D extends C{ public $p2 = 2; function __construct($p1,$p2){ //经典用法 parent::__construct($p1);//调用父类的构造函数来初始化p1 $this->p2 = $p2; //初始化p2 } function showMe2(){ echo "
我是子类,数据有:"; //基本用法: parent::showMe();//调用父类的showMe方法, echo "
D中p2=" . $this->p2; }}$d1 = new D(10,20); //此时就需要尊照构造函数的参数结构来使用$d1->showMe2();
parent关键字常见用法

转载于:https://www.cnblogs.com/sc1314-1218/p/8509903.html

你可能感兴趣的文章
【知识强化】第二章 线性表 2.2 线性表的顺序表示
查看>>
19.30内置登录处理
查看>>
00_前情回顾
查看>>
fortran90简明教程
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
丶制作一个数字猜猜看小游戏
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
ubuntu12.04 串口登录系统配置
查看>>
poj3061
查看>>
linux--多进程进行文件拷贝
查看>>
笔记:git基本操作
查看>>
.net开发工作中遇到的问题(附带解决方案)(持续记录)
查看>>
ajax 请求数据
查看>>
k8s-部署WEB-UI(dashboard)
查看>>