7.1 类的概念

2017-06-23  本文已影响8人  57fc17b7d598

类是对一个东西的描述,对象是根据这个描述实现出来的东西

类在PHP中表现的形式是 class ,对象的表现形式是 object

一个类中可以有自己的常量、变量(称之为属性)、函数(称之为方法)。

// 我是一个 '人' 的类
class People{

    // 属性列表
    public $name;
    public $age;

    // 构造方法
    public function __construct(string $n, int $a){
        $this->name = $n;
        $this->age = $a;
    }
    
    // 方法列表
    public function say(){
        echo "<p>我叫:{$this->name}</p>";
        echo "<p>今年:{$this->age} 岁</p>";
    }
    public function eat(){
        echo "<p>我需要吃饭喝水</p>";
    }
    public function sleep(){
        echo "<p>我需要睡觉</p>";
    }
}

// 我是一个 '人' 的对象,这步操作也叫实例化
$people = new People('刘国际', 26);

// 说句话看看
$people->say();

在类的普通方法(非静态)中使用 $this 变量可以获取到当前类的实例对象,但记得不要尝试去修改它。

通过 new 关键字可以将一个 class 类实例化,得到一个对象。

当把一个对象赋值给另一个变量时,默认便是引用赋值, 可以通过 clone 关键进行传值赋值,也就是克隆一个新的对象。

// 克隆一个对象
$temp = clone $people;

上例中展示了一般情况下创建实例对象的方法,但还可以通过一些别的方式来创建对象。

// 创建一个对象
$className = "People";
$temp1 = new $className("刘德华", 55);
var_dump($temp1);

// 创建一个对象
$temp2 = new $temp1("张学友", 50);
var_dump($temp2);

再看一些创建对象的方法

// 定义类
class Foo{
    public $name = "iGuoji";
    public static function byStatic(){
        return new static;
    }
}

// 实例化
$foo = new Foo();

// 通过方法实例化
$fooStatic = Foo::byStatic();

// 两者都是 Foo类 的实例
($foo instanceof Foo) and ($fooStatic instanceof Foo);
($foo instanceof $fooStatic) and ($fooStatic instanceof $foo);

// 两者相等,但不绝对相等
($foo == $fooStatic) and ($foo !== $fooStatic);




// 定义类
class Bar extends Foo{
    public function bySelf(){
        return new self;
    }
    // 创建父类的对象
    public function byParent(){
        return new parent;
    }
}

// 实例化
$bar = new Bar();

// 通过方法实例化
$barStatic = Bar::byStatic();
$barSelf = Bar::bySelf();
$barParent = Bar::byParent();

// 前三者都是 Bar类 的实例
($bar instanceof Bar) and ($barStatic instanceof Bar) and 
    ($barSelf instanceof Bar);

// 四者都是 Foo类 的实例
($bar instanceof Foo) and ($barStatic instanceof Foo) and 
    ($barSelf instanceof Foo) and ($barParent instanceof Foo);

// 除了第四个外,其他都相等
$bar != $barParent;

// 第四个和之前的 Foo类 实例相等
$barParent == $foo;
上一篇 下一篇

猜你喜欢

热点阅读