When to use self over $this?

前端 未结 23 2863
醉梦人生
醉梦人生 2020-11-21 11:19

In PHP 5, what is the difference between using self and $this?

When is each appropriate?

23条回答
  •  一个人的身影
    2020-11-21 12:17

    Short Answer

    Use $this to refer to the current object. Use self to refer to the current class. In other words, use $this->member for non-static members, use self::$member for static members.

    Full Answer

    Here is an example of correct usage of $this and self for non-static and static member variables:

    non_static_member . ' '
               . self::$static_member;
        }
    }
    
    new X();
    ?>
    

    Here is an example of incorrect usage of $this and self for non-static and static member variables:

    static_member;
        }
    }
    
    new X();
    ?>
    

    Here is an example of polymorphism with $this for member functions:

    foo();
        }
    }
    
    class Y extends X {
        function foo() {
            echo 'Y::foo()';
        }
    }
    
    $x = new Y();
    $x->bar();
    ?>
    

    Here is an example of suppressing polymorphic behaviour by using self for member functions:

    bar();
    ?>
    

    The idea is that $this->foo() calls the foo() member function of whatever is the exact type of the current object. If the object is of type X, it thus calls X::foo(). If the object is of type Y, it calls Y::foo(). But with self::foo(), X::foo() is always called.

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

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

提交回复
热议问题