首頁 >後端開發 >PHP問題 >php中static、self、$this的差別有哪些?

php中static、self、$this的差別有哪些?

coldplay.xixi
coldplay.xixi原創
2020-07-01 15:15:113987瀏覽

php中static、self、$this的差異有:1、【$this】表示物件的引用,寫在類別中的非靜態方法中;2、self和this不同,它指向類別本身,不指向任何實例化物件;3、static一般用來存取類別中的靜態變數和靜態方法。

php中static、self、$this的差別有哪些?

php中static、self、$this的差異有:

1、$this 表示物件的引用  $this寫在類別中的非靜態方法中, 實例化該類,誰呼叫該方​​法(一般是物件呼叫)$this則表示該物件的引用。

<?php
class Person {
    public $name;
    public function getName() {
        echo $this->name;
    }
}
$p = new Person();
$p2 = new Person();
$p->name = "小红";
$p2->name = "小明";
$p->getName();  // 小红
$p2->getName();  // 小明

 

 

 

2、self 和this 不同,它指向類別本身,不指向任何實例化對象,一般用來存取類別中的靜態變數和靜態方法,也是寫在類別中的方法。 self寫在哪個類別中則表示該類別的引用

 

 

<?php
class Person {
    public static $name = "小红";
    public static function getName() {
        echo self::$name;
    }
}
$p = new Person();
$p2 = new Person();
$p::getName();  // 小红
$p2::getName();  // 小红
$p::$name = "小明";
$p::getName();  // 小明
$p2::getName();  // 小明

 

 

3、static 一般用來存取類別中的靜態變數和靜態方法,也是寫在類別中的方法,也是那個類別呼叫該方法static就表示那個類別(綁定那個類別)

<?php
class A {
    public function say() {
        echo "Hello";
    }
    public function saySelf() {
       //static 和 self 可以调用非静态方法  不能调用非静态属性  静态方法中不能有$this
      // static 和 self 可以写在非静态的方法中 ,可以使用对象调用
        self::say();
    }
    public function sayStatic() {
        static::say();
    }
}
class B extends A {
    public function say() {
        echo "World";
    }
}
$b = new B();
$b->say();  // World
$b->saySelf();  // Hello
$b->sayStatic();  // World

相關學習推薦:PHP程式設計從入門到精通

#

以上是php中static、self、$this的差別有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn