本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

何时在$ this上使用self?

发布于2021-03-10 19:56     阅读(607)     评论(0)     点赞(4)     收藏(4)


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

什么时候合适?


解决方案


简短答案

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

这个想法是$this->foo()调用foo()当前对象的确切类型成员函数。如果对象是type X,则调用X::foo()如果对象是type Y,则调用Y::foo()但是X::foo()总是使用self :: foo()来调用。

http://www.phpbuilder.com/board/showthread.php?t=10354489

通过http://board.phpbuilder.com/member.php?145249-laserlight



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/105/025ae0b506232afa090c/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)