类成员默认值

定义类属性的时候,可以使用默认值

<?php
class A
{
    //默认值
    public $a = 'Hi';
    private $b = 'Hello';

    //方法
    public function actionA()
    {

    }
}

创建实例

要创建一个对象的实例,使用关键字 new

<?php
$a = new A();//创建类 A 的实例

对象赋值

当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

<?php

class A
{
}

$a = new A();
$b = $a;
$c = &$a;
$d = clone $a;

$a = null;

var_dump($a,$b,$c,$d);

上述结果为

NULL
object(A)#1 (0) {
}
NULL
object(A)#2 (0) {
}

$this

伪变量 $this 可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。

 

<?php
class A
{
    function actionA()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo '$this is not defined.'.PHP_EOL;
        }
    }
}

class B
{
    function actionB()
    {
        A::actionA();
    }
}

$a = new A();
$a->actionA();
A::actionA();
$b = new B();
$b->actionB();
B::actionB();

结果输出

$this is defined (A)
$this is not defined.
$this is not defined.
$this is not defined.

从结果可以看出,$this 只能在对象中使用,不能在静态方法中调用。但是如果在另一个对象(类 B)中调用静态方法,则 $this 指向该类( B )。

 

对象继承

一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。PHP 不支持多重继承,一个类只能继承一个类。

class A
{

}
class B extends A
{

}

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通

<?php
class A
{
    public function sayHi()
    {
        echo "Hi".PHP_EOL;
    }
    final public function sayBye()
    {
        echo "Bye".PHP_EOL;
    }
}

class B extends A
{
    public function sayHi()
    {
        parent::sayHi();
        echo "Hello".PHP_EOL;
        parent::sayBye();
    }
    //不能被覆盖,报错,练习的时候注意删除该方法
    public function sayBye()
    {
        echo "See you";
    }
}

$b = new B();
$b->sayHi();

结果输出

PHP Fatal error:  Cannot override final method A::sayBye() in /home/*.php on line 27

从结果可以看到

  • 使用 final 修饰的方法不能被覆盖
  • 使用 parent:: 可以调用父类方法或属性

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。