PHP 자체

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-08-08 09:23:00
원래의
1329명이 탐색했습니다.
php类中的this,self,parent

this代表当前对象,self代表当前类,parent代表父类,这个解释很晦涩,下面结合例子具体说明一下self

php类的定义和对象(实例)的存储是分开的,类的定义只有一份,实例可以有多个。self就代表类定义

类的定义主要包括方法(类的属性可以动态添加),不严谨的说,方法是属于类的,属性是属于对象的。

那么理论上通过类名就可以调用类的所有方法(包括静态,非静态,注意访问限制),包括继承来的,从这个角度来说self==当前类。

所以
通过self,类名可以调用本类的常规方法,静态方法,父类的方法(后记,如方法中用了this,会报运行时错误,但语法没有问题)
로그인 후 복사
<pre name="code" class="php">class A
{
    public static $count=1;
    const N = 10; 
    private $_a = "_a \n";
    protected $_b = "_b \n";
    public $c = "c \n";

    public function n() {
        echo  __METHOD__."\n";
    }   

    public function func() {
        echo  __METHOD__." " .$this->c;
    }   

    public static function f() {
        echo  __METHOD__."\n";
    }   

    public static function fn() {
        echo __METHOD__." " .self::N."\n";
    }   
}

class B extends A
{
    const N = 100;

    public static $count=1;
    public $p = "pp\n";

    public function d() {
        echo __METHOD__." ".$this->p." \n";
    }   

    public  function e() {
        self::n();
        echo __METHOD__." \n";
    }

    public static function f(){
        self::e();
        self::n();
        echo __METHOD__."\n";
    }

    public function func() {
        parent::func();
        echo "func\n";
    }
}

echo "=========B:e()=========\n";
B::e();

echo "=========B:n()=========\n";
B::n();

echo "=========B:f()=========\n";
B::f();

echo "=========B:d()=========\n";
B::d(); // 运行时错误error
로그인 후 복사

로그인 후 복사

위 내용은 PHP 자체에 대한 내용을 포함하여 소개되었으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿