一尘不染

何时在$ this上使用self?

php

在PHP 5中,使用self和之间有什么区别$this

什么时候合适?


阅读 305

收藏
2020-05-26

共1个答案

一尘不染

简短答案

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

完整答案

这里是一个例子 正确 的使用$thisself用于非静态和静态成员变量:

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

这里是一个例子 不正确 的使用$thisself用于非静态和静态成员变量:

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

这是带有for成员函数的 多态 示例$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();
?>

这是通过使用for成员函数来 抑制多态行为 的示例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();
?>
2020-05-26