[php]属性、方法和常量

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

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


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


<?php

class 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();

?>

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

<?php

class A{

    public $a = 10;

    echo $a;   //错误,此行既不是属性也不是方法和常量,不为类所接受。

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

}

?>

类成员的概述

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

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

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

类常量

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

语法形式:

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

使用形式:

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

示例:

<?php
class C1{
    //定义类常量;
    const P = 3.14;
    const G = 9.8;
}

//使用类常量;
$v1 = C1::P*3*3;
echo "<br />v1 =$v1";      //v1 = 28.26

echo "<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,…);

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

<?php

class 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.如果一个类中定义了构造方法,那么实例化该类时,就会自动调用该方法。且实例化类的参数需要与构造方法的参数相匹配。

示例:

<?php

class 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只能代表其代码所在的位置的类。

示例:

<?php

class 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();

?>
//结果:
5
5
5 (重写后self依然读取其所在位置的类的信息)
10(重写后static读取调用它的对象的类的信息)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值