美文网首页
7.1 类的概念

7.1 类的概念

作者: 57fc17b7d598 | 来源:发表于2017-06-23 16:27 被阅读8次

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

    类在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;
    

    相关文章

      网友评论

          本文标题:7.1 类的概念

          本文链接:https://www.haomeiwen.com/subject/tqbccxtx.html