PHP的static與Java的static的對比

在Java中類的靜態變量/靜態方法又稱之爲類變量 /類方法,它們存在於內存棧中,只有一份,能夠經過類和對象直接訪問php

public class MyStatic {
    public static String className = "MyStatic";
    public static void getClassName() {
        //固然你直接寫className也能訪問到,但前提是此函數裏沒有局部變量名覆蓋靜態變量名
        System.out.println(MyStatic.className);
    }
    
    public static void main(String[] args) {
        //類訪問靜態變量
        System.out.println(MyStatic.className);
        //對象訪問靜態變量
        System.out.println((new Mystatic()).className);
        //類訪問靜態方法
        Mystatic.getClassName();
        //對象訪問靜態方法
        (new Mystatic()).getClassName();
        //=========
        (new Mystatic()).className = "new class name";
        //=========
        //類訪問靜態變量
        System.out.println(MyStatic.className);
        //對象訪問靜態變量
        System.out.println((new Mystatic()).className);
        //類訪問靜態方法
        Mystatic.getClassName();
        //對象訪問靜態方法
        (new Mystatic()).getClassName();
    }
}

注意喲,java的靜態變量並不由止對象的訪問,但PHP不一樣,PHP的靜態方法是能夠被對象調用,但類的靜態變量只能被類的方法去訪問,對象是不能直接訪問的java

class Mystatic {
    public static $className = __CLASS__;
    public static function getClassName() {
        echo self::$className;
    }
}

echo Mystatic::$className;
Mystatic::getClassName();
//but
(new Mystatic())->className;//error 沒有權限
//but 下面是能夠的
(new Mystatic())->getClassName();

//靜態的只有一份,你們一塊兒硬鏈接,同步修改
Mystatic::$className = "new class Name";
(new Mystatic())->getClassName();

因此PHP的對象若是要訪問類的靜態變量必須依靠接口,在類中寫出訪問靜態變量的方法,而不能像Java同樣直接使用.語法類和對象皆可訪問函數

Java:spa

靜態屬性類和對象皆可訪問code

靜態方法類和對象皆可訪問對象

PHP:接口

靜態屬性類可訪問,對象需經過接口訪問內存

靜態方法類可訪問,對象也能夠調用訪問get

但靜態方法不可訪問成員變量,只能訪問靜態屬性!!!!!!同步

相關文章
相關標籤/搜索