1. 犀牛前端部落首页
  2. PHP教程

PHP self和$this的区别

PHP self和$this的区别

使用$this引用当前对象。使用self引用当前类。换句话说,对于非静态成员使用$this->成员,对于静态成员使用self::$member。

例子

下面是一个正确使用$this和self的例子,用于非静态和静态成员变量:

<?php
class X {
    private $non_static_member = 1;
    private static $static_member = 2;

    function __construct() {
        echo $this->non_static_member . ' '
           . self::$static_member;
    }
}

new X();
?>

下面是对非静态和静态成员变量不正确使用$this和self的示例:

<?php
class X {
    private $non_static_member = 1;
    private static $static_member = 2;

    function __construct() {
        echo self::$non_static_member . ' '
           . $this->static_member;
    }
}

new X();
?>

这里有一个关于成员函数的$this多态性的例子:

<?php
class X {
    function foo() {
        echo 'X::foo()';
    }

    function bar() {
        $this->foo();
    }
}

class Y extends X {
    function foo() {
        echo 'Y::foo()';
    }
}

$x = new Y();
$x->bar();
?>

这里有一个例子,通过在成员函数中使用self来抑制多态行为:

<?php
class X {
    function foo() {
        echo 'X::foo()';
    }

    function bar() {
        self::foo();
    }
}

class Y extends X {
    function foo() {
        echo 'Y::foo()';
    }
}

$x = new Y();
$x->bar();
?>

$this->foo()调用foo()成员函数,该成员函数的类型与当前对象的确切类型相同。如果对象是X类型的,那么它就调用X::foo()。如果对象的类型是Y,它调用Y::foo()。但是对于self::foo(), X::foo()总是被调用。

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4469.html

发表评论

登录后才能评论