[php]属性、方法和常量

来源:互联网 发布:0基础软件开发 编辑:程序博客网 时间:2024/06/05 03:27

    • 类成员的概述
    • 类常量
    • 类属性
      • 普通属性实例属性
      • 静态属性
    • 类方法
      • 普通方法实例方法
      • 静态方法
      • 构造方法__construct
      • 析构方法__destruct
      • static关键字的新用法

属性:
属性就是“变量”,只不过现在它写在了类中,就称为属性;

方法:
方法就是“函数”,只不过现在它写在了类中,就称为方法;


注意:属性和变量,方法和函数的区别是,变量和函数是独立存在的,一般是独立调用。而属性和方法只能通过这个类或者这个类的对象才能去调用。
通过一个类创建出来的对象,直接拥有这个类的属性和方法。


<?phpclass MyGirl{    var $name = "小花";  //此时它叫做“属性”(原来是变量)    var $age = 18;    var $edu = "大学";    //此时,它叫做“方法”(原来是函数)    function xiyifu{        echo "<br />{$this->age}岁{$this->edu}学历的{$this->name}再勤快的洗衣服";    }    function zuofan{        echo "<br />{$this->age}岁{$this->edu}学历的{$this->name}再快乐的做饭";    }}$obj1 = new MyGirl();$obj1->xiyifu();$obj1->zuofan();?>

注意:
类中只能有属性方法常量三种成员。

<?phpclass A{    public $a = 10;    echo $a;   //错误,此行既不是属性也不是方法和常量,不为类所接受。        if($a > 0){    //错误,此循环既不是属性也不是方法和常量,不为类所接受。    echo $a;       }}?>

类成员的概述

面向对象的编程,是需要通过“对象”去做什么事情以完成某个目标。而对象源于类。
所以——面向对象编程,一切都是从定义类开始。

类中成员分为三大类:
1.属性:
a.普通属性;
b.静态属性;
2.方法:
a.普通方法;
b.静态方法;
c.构造方法;
d.析构方法;
3.常量

在使用习惯上,我们会把常量放前面,然后是属性,最后是方法。但顺序不是这样也没什么问题。

类常量

当在类中定义一个常量时,该常量就称为“类常量”。

语法形式:

calss 类名{
const 常量名 = 常量值;
}

使用形式:

常量的使用,是通过类名,并使用范围解析符(::)来取用的。

示例:

<?phpclass C1{    //定义类常量;    const P = 3.14;    const G = 9.8;}//使用类常量;$v1 = C1::P*3*3;echo "<br />v1 =$v1";      //v1 = 28.26echo "<br />C1::G = ".C1::G;        //C1::G=9.8  .常量在双引号中不会被编译?>

类属性

普通属性(实例属性)

实例,也叫做“对象”;
实例(普通)属性,就是一个可以在一个类实例化的对象上使用的属性。

语法形式:

class 类名{
var =var属性名; //这个属性没有初始值;
//也可以使用pubic来定义属性。
public =public属性名;
}

使用形式:

可以通过该类的对象,来使用实例属性。(把它当成一个变量)
$对象->属性名;

静态属性

静态属性,本质上也是“变量”,但它的特点是——该变量只隶属于类本身,即:一个类中的一个静态属性,就只有一份数据,不会被复制。而实例属性,则是会被每个对象“复制”;

语法形式:

class 类名{

static $属性名 = 初始值;static $属性名;  //该属性没有初始值

}

使用形式:

使用类名和范围解析符(::)来对静态属性进行操作:
类名 :: $静态属性名;

示例:

类方法

普通方法(实例方法)

实例方法是一个类中定义的方法,可以为这个类的所有对象调用。

语法形式:

class 类名{

function 方法名(形参1,形参2,...){    //方法体。。。}

}

使用形式:

$对象名->方法名(实参1,实参2,…);

静态方法:

一个类中定义的方法,只隶属于这个类本身,而不属于这个类的所有对象。

语法形式:

class 类名{

static function 方法名(形参1,形参2,...){    //方法体。。。}

}

使用形式:

类名 :: 方法名(实参1,实参2,…);

普通方法和静态方法的综合示例:

<?phpclass C1{    public $p1 = 1;    //实例属性    static $p2 = 2;    //静态属性    //实例方法    function showInfo1(){        echo "<br />实例方法被调用!";        echo "<br />p1的值为:".$this->p1;        //$this代表一个对象,就是调用当前这个方法的对象。        //实例方法中,也可以去使用“静态属性”        echo "<br />p2的值为:".self::$p2;        //self相当于$this。调用的是本身所在的类,这里的self代表C1中的静态类    }    static function showInfo2(){        echo "<br />静态方法被调用!";        echo "<br />p2的值为:".self :: $p2;        //self和$this都是重要的概念。        //静态方法中,通常不能使用实例属性。    }}$o1 = new C1();$o1->showInfo1();      //使用对象调用实例方法C1 :: showInfo2();          //使用类调用静态方法?>

构造方法(__construct)

构造方法,是一个特殊的方法:
1.构造方法的名字是固定的:__construct;
2.该方法通常都不要我们自己调用,而是在new一个对象的时候,会首先自动调用的方法;
3.该方法主要的目的是为了在new一个对象的时候,给该对象设置一些“初始值”。(进行初始化工作)
4.构造方法的参数没有规定,通常根据实际需要来定义,目的是为了对象属性数据的初始化。
5.如果一个类中定义了构造方法,那么实例化该类时,就会自动调用该方法。且实例化类的参数需要与构造方法的参数相匹配。

示例:

<?phpclass MyGirl{    var $name;    var $age;    var $edu;    function __construct($p1,$p2,$p3){        $this->name = $p1;        $this->age = $p2;        $this->edu = $p3;    }    function xiyifu{        echo "<br />{$this->age}岁{$this->edu}学历的{$this->name}正在开心的洗衣服";    }}//new这个MyGirl类的同时,就自动调用了_construct($p1,$p2,$p3)这个方法,所以要在new的时候加对应的实参$obj1 = new MyGirl('小星',20,'初中');$obj1->xiyifu();$obj1 = new MyGirl('小西',22,'大学');$obj1->xiyifu();?>

析构方法(__destruct)

1.析构方法是一个特殊的方法,名字为固定的词:__destruct
2.析构方法是在一个对象被“销毁”的时候会自动被调用的方法——我们无法调用它。
3.析构方法不能带参数(形参),但方法中也可以使用$this这个词,代表当前对象。

static关键字的新用法

static可以跟self一样,代表”当前类“,用于访问一个类的”静态属性或静态方法“。
但是static比self更灵活,因为static代表的是当前方法的类,而不是其代码所在的位置的类。
而self只能代表其代码所在的位置的类。

示例:

<?phpclass A{    static $p1 = 5;    static function showOb(){        echo "<br />".self :: p1;        echo "<br />".static :: p1;    }}class B extends A{    static $p1 = 10;    //class B 中的$p1被重写了}A :: showOb();B :: showOb();?>//结果:555 (重写后self依然读取其所在位置的类的信息)10(重写后static读取调用它的对象的类的信息)
0 0
原创粉丝点击