类、面向对象、类的继承

类:

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

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

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

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

举例子:

人类;动物类;鸟类

对象:

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

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

//创建类
class computer{
    //定义属性
    var $code ="c1";
    var $color ="black";
    //定义方法
    function show(){
        echo "这台电脑型号是:".$this->code."<br />"."颜色是:".$this->color."<br />";
    }
}
//创建类的对象
$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 "<br />特征:" . $this->prop1;
    }

}
Class human extends jizuidongwu{
    public $prop2 = "两脚走路";
    function show2(){
        echo "<br />特征:" . $this->prop1;
        echo "<br />特征:" . $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 "<br />属性p1=" . $this->p1;
        echo "<br />属性p2=" . $this->p2;//此时可以访问下级的$p2(但很不常用)
    }
}
class D extends C{
    public $p2 = 2;
    public function showInfo2(){
        echo "<br />属性p1=" . $this->p1;//访问的是上级的$p1(常见情形)
        echo "<br />属性p2=" . $this->p2;
    }
}
$d1 = new D();
$d1->showInfo2();
echo "<br />在类外p2=" . $d1->p2;
$d1->showInfo();

代码演示

protected 受保护的:

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

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

代码演示

private私有的:

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

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

代码

访问修饰限定符的总结:


范围


本类内


继承关系类内


类外


public


可以


可以


可以


protected


可以


可以


不可以


private


可以


不可以


不可以

parent代表父类:

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

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

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

class C{
    public $p1 = 1;
    function showMe(){
        echo "<br />我是父类,数据有:";
        echo "<br />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 "<br />我是子类,数据有:";
        //基本用法:
        parent::showMe();//调用父类的showMe方法,
        echo "<br />D中p2=" . $this->p2;
    }
}
$d1 = new D(10,20);    //此时就需要尊照构造函数的参数结构来使用
$d1->showMe2();

parent关键字常见用法

原文地址:https://www.cnblogs.com/sc1314-1218/p/8509903.html

时间: 2024-09-30 13:04:07

类、面向对象、类的继承的相关文章

python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)

python_way.day7 1.模块 configparser,xml,shutil,subprocess 2.面向对象(上) 创建类,类的构成,函数式编程与面向对象编程的选择,类的继承 1.模块 configparser 用于处理特定格式的文件,其本职上使用open来操作,只能是  [test1] 特定的格式 [test1] k1 = 123 k2 = True [test2] k1 = 123 k2 = v1 文件内容 1.获取 import configparser #打开文件找到文件

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

前言 上篇博客笔者带领大家初步梳理了Python面向对象的基础知识,本篇博客将专注于解决三个知识点:类的命名空间,类的组合以及面向对象的三大特性之一继承,一起跟随笔者老看看今天的内容吧. 1.类的命名空间 在上一篇博客中,我们提到过对象可以动态添加属性,一起来回忆下昨天的知识点,看如下的代码: class A: pass a = A() a.name = 'alex' print(a.name) 这里我们手动为a对象添加了一个属性name,然后直接打印可以得到a对象的名称.通过这个例子,我们可以

Lua面向对象----类、继承、多继承、单例的实现

(本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&utm_medium=referral lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模拟类也并不困难. lua中,面向对象是用元表这个机制来实现.

面向对象的类访问和对象访问的区别【this以及类访问】、静态成员的访问区别、类常量等、继承和重写、访问修饰限定符、冒泡排序

1.mysql封装类 在构造函数中定义初始化数据库连接的相关参数[因为实例化对象时传入的参数是该对象的唯一参数入口]但是不需要再构造函数中进行冗余定义,而是在构造函数中进行调用类中的其他方法的方式来实现构造函数的设置工作[这样的模块分离使逻辑更加简单] [重点]2.静态成员相当于每次实例化对象之间是有关系的[例如计数功能]因为每次实例化类时创建的对象占用的空间都是新创建的,这一点需要注意,所以同一个类下的对象之间的变量并没有交互的效果.[回想起当初函数中的静态局部变量的使用][延生到静态全局变量

python开发面向对象基础:接口类&amp;抽象类&amp;多态&amp;多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

黑马程序员——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对象的特点: * 符合人们思考习惯的思想 * 可以将复杂的事情简单化 * 将程序员从执行者转换成了指挥者 * 完成需求时:只需要寻找具备所需功能的对象或者创建所需功能的对象即可,简化开发效率并提高对象的复用性. 3.面向对象的三个特征:封装(Encapsulation).继承(Inheritance).多态(Polymorphism). 二.类与对象 (一)类与对象之间的关系 1.类的定义:类

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数.派生类到基类的转换 .基类到派生类的转换 一.不能自动继承的成员函数 构造函数 拷贝构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化调用基类构造函数完成(如果没有给出则默认调用默认构造函数). 派生类的构造函数需要给基类的构造函数传递参数 #include <iostream

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承、虚继承与虚基类

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承.虚继承与虚基类 一.多重继承 在C++语言中,一个派生类可以从一个基类派生,称为单继承:也可以从多个基类派生,称为多继承. 多重继承--一个派生类可以有多个基类 class <派生类名> : <继承方式1> <基类名1>,<继承方式2> <基类名2>,... { <派生类新定义成员> }; 可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个

Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详细的详解了类的使用,但是由于篇幅的限制,关于类的很多特性都没有讲解到.今天在这篇文章中,详细的讲解Kotlin中类的特性.如果您对Kotlin中的类还没有一个整体的了解的话,请参见我上一篇文章Kotlin--类(class)详解 众所周知,Kotlin是一门面向对象的开发语言.那么他也有面向对象语言

python24 面向对象的绑定方法 类与类之间的继承

## 类属性与对象属性 类中应该仅存储所有对象共有的内容 ? 如所有人的国籍相同那就放到类中 对象中存储每个对象独有的内容 ? 如每个人的名字都不同 ## __init__方法的作用 init 是初始化的缩写 用于为对象的属性设置初始值 特点: ```# 执行时机:当实例化产生对象时会自动执行该函数# 会自动传入需要初始化的对象# 初始化必须包含至少一个参数 用于表示对象本身# 该函数不允许有返回值 必须为None``` ## 绑定方法 绑定即两个东西绑在一起 方法就是函数 那就是说绑定方法 =