久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

類中類外訪問靜態成員和普通成員 - PHP面向對象編程(OOP)

在php中的訪問常量和靜態量的方法總結

范圍解析操作符 (::)

理解

類外使用

靜態成員

  • $obj::$member1;//訪問實例中的靜態變量
  • ClassName::member3_visit2();//訪問ClassName類中的靜態方法

普通成員

  • echo $obj->member1;//訪問實例中的變量
  • $obj->member2();//訪問實例中的方法

常量

  • echo $obj::member1;//訪問實例中的常量

類內使用

靜態成員

  • self::$member2;//訪問類中靜態變量
  • ClassName::$member2;//訪問類中靜態變量(不建議使用)
  • self::member2;//訪問類中靜態方法

普通成員

  • echo $this->member2;//訪問類中的變量
  • echo $this->member3();//方法中訪問其他方法

常量

  • echo self::member2;//方法中訪問常量

訪問大綱

訪問又分為靜態成員的訪問和普通成員訪問

1:靜態成員

  • 類內訪問
self::$靜態屬性名 
self::$類常量名 

(其實類內頁可以使用類外訪問的類名的訪問方式,不過考慮到了后期類名的更改,self就很方便的解決了這個問題)

  • 類外訪問
類名::$靜態屬性名 
類名::$類常量名

2:普通成員

  • 類內訪問
$this->屬性名 
$this->方法名
  • 類外訪問
$對象名->屬性名 
$對象名->方法名 ($對象名 指的是實例化后的對象)

實戰演示

一:靜態成員屬性的訪問

1: 靜態外部訪問

<?php 
    class ClassName {
        //必須帶“$”,否則是常量
        public static $member1 = '成員1';
    }
    $obj = new ClassName;
    //注意這里的“::”
    echo $obj::$member1;
?>

輸出:

成員1

2:靜態內部訪問?(要知道,在類內部訪問類成員必須定義一個方法來訪問)

<?php 
    class ClassName {
        //必須帶“$”,否則是常量
        public static $member2 = '成員2 <br />';
        
        public function member2() {
            echo self::$member2;
            //下面這條效果與上條相同,但不推薦使用(考慮繼承中。類名會變的因素)
            echo ClassName::$member2;
        }
    }

    $obj = new ClassName;

    //類內訪問類中靜態成員
    $obj->member2();
?>

輸出:

成員2
成員2
  • 1:類內訪問類內成員首先要定義一個方法在方法內訪問;
  • 2:最開始介紹到:類內其實可以使用類名的訪問方式(echo ClassName::$member2;),考慮到項目后期可能會有類名更改問題,類內最好使用self來代替

(不過也正好證明了在類內訪問其實就是使用類(名)進行指定類內的成員,講這個是因為不同于普通成員中的類內訪問方式--$this)

二:靜態成員方法的訪問

1:在類外訪問類內靜態方法

<?php 
    class ClassName {

        //靜態方法
        public static function member3() {
            echo __METHOD__;//打印當前方法的方法名
        }

    }

    //類外訪問類內靜態方法
    ClassName::member3();
    
?>

輸出:

ClassName::member3

在類外使用 類名::類中的方法名。 (__METHOD__指的是當前方法的方法名

2:在類內訪問類內靜態方法

<?php 
    class ClassName {

        //靜態方法
        public static function member3() {
            echo __METHOD__.'<br />';//打印當前方法的方法名
        }

        //方法訪問靜態方法
        public function member3_visit1() {
            self::member3();
        }

        //靜態方法訪問靜態方法
        public static function member3_visit2() {
            self::member3();
        }

    }

    $obj = new ClassName;

    $obj->member3_visit1();

    ClassName::member3_visit2();
    
?>

輸出

ClassName::member3
ClassName::member3
  • 類內訪問靜態方法,同樣需要在方法內訪問,
  • 定義的方法可以使用普通方法進行訪問,
  • 也可以定義一個同樣是靜態方法的方法來訪問其他靜態方法。。
  • (可能這句話有些繞,直接分析代碼就行)

三:普通成員的屬性訪問

1:在類外訪問

<?php 
    class ClassName {
        public  $member1 = '成員1 ';
    }

    $obj = new ClassName();

    //注意這里,不是“$member1”
    echo $obj->member1;
    
?>

輸出:

成員1

這里有個重點,記得看后面

2:在類內訪問

<?php 
    class ClassName {

        public  $member2 = '成員2 ';

        function member2() {
            echo $this->member2;
        }
    }

    $obj = new ClassName();

    $obj->member2();
    
?>

輸出:

成員2

你可能已經發現了,為什么在最開始靜態訪問演示的時候,

        function member2() {
            echo $this->member2;
        }
$obj->member2();

上面變量名都有$符號,而這里卻沒有。
要知道這里面php里面有個可變屬性和可變方法。下面來演示一下。

類中類外訪問靜態成員和普通成員 - PHP面向對象編程(OOP)

在外面如果不帶$,就是代表著取obj這個對象中進行訪問查找 為此名字的成員。

一旦加上$,因為在類外部,就會被當做變量來找,所以就會報錯。當然可以這樣寫 ?

<?php 
    class ClassName {
        public  $member1 = '成員1 ';
        public  $member2 = '成員2 ';

        function member2() {
            echo $this->member2;
        }
    }

    $obj = new ClassName();

    $member1 = 'member1';

    echo $obj->$member1;

    $obj->member2();
    
?>

輸出:

成員1 成員2

(其中一個值當作另一個的名)當obj進行指向訪問的時候 $member就會被解析為 member

四:普通成員的方法訪問

1:類外訪問

<?php 
    class ClassName {
        
        public  $member2 = '成員2,<br /> ';

        function member2() {
            echo $this->member2;
        }

        public function member3() {
            echo __METHOD__;//打印當前方法的方法名
        }

    
    }

    $obj = new ClassName();

    $obj->member2();

    $obj->member3();

    
?>

輸出

成員2,
ClassName::member3

2:類內訪問

<?php 
    class ClassName {

        public function member3() {
            echo __METHOD__.'<br />';//打印當前方法的方法名
        }

        public function member4() {
            echo $this->member3();

            //與上面一行代碼同樣的意思
            $member3 = 'member3';
            echo $this->$member3();
        }

    }

    $obj = new ClassName();

    $member4 = 'member4';
    $obj->$member4();

    
?>

輸出:

ClassName::member3
ClassName::member3

再次直接寫了 可變的 形式,方法同樣適用。

思考(這樣的好處,以后比如前臺頁面的訪問可以都給定 一個頁面,頁面中定義好類,類中定義好各個對象,通過頁面點擊傳遞要制定的對象名也就是方法名,然后使用可變的形式,來隨時替換到變量,而調用只需要調用一次 $obj->變量名)

五:類常量的訪問

首先:類常量就是const定義的常量。

要記住:類常量只能用const來定義

1:類外訪問

<?php 
    class ClassName {
        const member1='類常量1<br />';
    }

    $obj = new ClassName;

    echo $obj::member1;

?>

輸出:

類常量1

2:類內訪問

<?php 
    class ClassName {

        const member2='類常量2<br />';

        public function visit() {
            echo self::member2;
        }
    }

    $obj = new ClassName;

    $obj->visit();

?>

輸出

類常量2

跟靜態方式其實一樣,但唯一的差別就是最前面中的 注釋,變量名在類內聲明的時候沒有 $

注意:(至于可變的形式,在常量中類內或者類外訪問都不可以

<?php 
//以下代碼采用可變方法訪問常量,會報錯
    class ClassName {

        const member1='類常量1<br />';
    }

    $obj = new ClassName;

    //可變方法
    $member1 = 'member1';
    echo $obj::$member1;

?>

不過在調用方法的時候可以使用可變的形式,畢竟跟常量也沒太大關系。

類與對象的內存關系

我們上面都知道,靜態訪問和類常量都是使用 類名來訪問,而其他都是通過實例化的對象來訪問。

其實:

在類內部,是分空間的,靜態成員一般保存在類空間里,而像其他的 普通屬性都是保存在對象的空間里(這里的對象指的是實例化的對象)

而唯一特殊的就是 成員方法,它按我們的訪問方式是通過 對象來訪問的,但是它并不存儲在對象的空間里,相反存儲在了類的空間里

我們來使用前面的代碼 證明一下:

<?php 
    class ClassName {
        public  $member1 = '成員1 ';
        public  $member2 = '成員2,<br /> ';
        function member2() {
            echo $this->member2;
        }


        //兩個成員方法的訪問
        public function member3() {
            echo __METHOD__.'<br />';//打印當前方法的方法名
        }


        public function member4() {
            $member3 = 'member3';
            echo $this->member3();
        }

    }

    $obj = new ClassName();

    $obj->member1 = '成員5';
    echo $obj->member1;

    $member1 = 'member1';
    echo $obj->$member1;
    $obj->member2();


    $obj->member3();


    $member4 = 'member4';
    $obj->$member4();


    $obj1 = new ClassName;
    echo $obj1->member1;
    
?>

輸出

成員5成員5成員2,
ClassName::member3
ClassName::member3
成員1

可以看出 新聲明的obj1?明顯沒有被前面的 obj 改變的成員5 而改變!

就算是這個特殊的成員方法雖然存在了類空間里,但是仍不會被改變。

這樣的原因就是因為存儲在了 實例化的對象的空間里,一個實例化中的改變不會影響其他實例化對象的改變

<?php 
    class ClassName {
        //兩個靜態屬性
        public static  $member1 = '靜態成員1 <br /> ';
        public static  $member2 = '靜態成員2 <br /> ';

        //兩個靜態方法
        public static function member3() {
            echo __METHOD__.'<br />';//打印當前方法的方法名
        }

        public function member3_visit1() {
            self::member3();
        }

        public static function member3_visit2() {
            self::member3();
        }

        public function member2() {
            echo ClassName::$member2;
        }

    }

    $obj = new ClassName();

    //類外訪問類中靜態屬性
    ClassName::$member1 = '11131313';
    echo ClassName::$member1;

    //類內訪問類中靜態屬性
    $obj->member2();

    //類外訪問類內靜態方法
    ClassName::member3();

    $obj->member3_visit1();

    ClassName::member3_visit2();
    

    $obj1 = new ClassName;
    echo ClassName::$member1;

    
    
?>

而在類空間中除了不能改變的,常量外的靜態成員,只要被改變,其他的實例化對象同樣就會被調用。如上所顯示。

參考文章

給TA贊賞
共{{data.count}}人
人已贊賞
??
Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
?
購物車
優惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      色婷婷国产精品综合在线观看| 欧美色综合天天久久综合精品| 国产寡妇亲子伦一区二区| 激情欧美一区二区三区在线观看| 成人毛片老司机大片| 在线观看视频一区二区欧美日韩| 日韩一区二区电影| 国产日韩精品一区二区三区| 亚洲综合色区另类av| 久久精品国产精品亚洲红杏| 99在线精品一区二区三区| 91精品国产综合久久久久| 国产精品丝袜一区| 男人的j进女人的j一区| 色综合中文综合网| 欧美午夜电影网| 欧美精彩视频一区二区三区| 亚洲动漫第一页| 成人高清视频在线| 亚洲精品一区二区在线观看| 亚洲国产中文字幕在线视频综合 | 国产乱人伦偷精品视频不卡| 91国产丝袜在线播放| 伊人婷婷欧美激情| 成人少妇影院yyyy| 精品国产乱码久久久久久牛牛| 亚洲一二三四区| 一本一道综合狠狠老| 国产精品视频你懂的| 韩国女主播成人在线观看| 欧美一区二区三级| 三级成人在线视频| 欧美日韩一本到| 亚洲国产另类精品专区| 色综合久久精品| 国产精品视频九色porn| 极品少妇一区二区三区精品视频| 欧美人体做爰大胆视频| 亚洲在线一区二区三区| 色爱区综合激月婷婷| 亚洲视频免费在线观看| av在线一区二区三区| 国产精品私房写真福利视频| 成人午夜视频免费看| 亚洲国产精品99久久久久久久久| 国产一区二区三区免费看 | 国产精品无圣光一区二区| 国产精品69久久久久水密桃| 久久综合资源网| 国产剧情av麻豆香蕉精品| 精品91自产拍在线观看一区| 狠狠久久亚洲欧美| 精品国产91亚洲一区二区三区婷婷| 麻豆91精品91久久久的内涵| 日韩午夜在线观看视频| 久久不见久久见中文字幕免费| 精品毛片乱码1区2区3区| 精品一区二区三区视频| 久久影音资源网| 成人黄色777网| 亚洲综合色视频| 日本一区二区三区视频视频| 国产成人精品亚洲777人妖| 日本一区二区三区视频视频| 日本高清成人免费播放| 日产国产欧美视频一区精品| 日本道在线观看一区二区| 亚洲一区在线观看视频| 91精品国产麻豆国产自产在线 | 亚洲成av人片| 日韩一级二级三级精品视频| 美国十次综合导航| 国产欧美精品国产国产专区| 91社区在线播放| 日韩精品一卡二卡三卡四卡无卡| 精品免费视频一区二区| 成人av在线一区二区三区| 亚洲成av人片一区二区三区| 久久网这里都是精品| 色综合久久中文字幕| 日本成人中文字幕在线视频| 中文字幕精品—区二区四季| 欧美日韩一区久久| 国产一区二区三区四区五区入口| 亚洲视频一二三区| 亚洲精品一区二区三区影院| 91久久精品日日躁夜夜躁欧美| 麻豆视频观看网址久久| 亚洲精品国产成人久久av盗摄| 精品三级av在线| 色综合婷婷久久| 久久 天天综合| 亚洲国产aⅴ成人精品无吗| 国产婷婷色一区二区三区在线| 欧美日韩一区二区不卡| caoporn国产精品| 国产在线国偷精品免费看| 亚洲高清视频的网址| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美va亚洲va香蕉在线| 91国产成人在线| 粉嫩aⅴ一区二区三区四区五区 | 欧美电视剧免费观看| 91蜜桃在线免费视频| 国产盗摄一区二区| 九九国产精品视频| 日韩福利电影在线| 一区二区成人在线视频| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品日韩成人| 久久久久久97三级| 日韩一区二区三区在线| 欧美日韩久久不卡| 日本精品一区二区三区四区的功能| 国产呦萝稀缺另类资源| 奇米一区二区三区av| 亚洲成a人在线观看| 亚洲福利视频一区二区| 亚洲一区二区视频| 亚洲免费观看视频| 国产精品成人免费| 国产精品天干天干在观线| 国产欧美日韩亚州综合 | 欧美福利视频导航| 一区二区三区不卡视频| 国产精品成人网| 中文字幕一区二区三区四区不卡 | 波多野结衣的一区二区三区| 国产成人免费视频网站高清观看视频 | 亚洲女女做受ⅹxx高潮| 一区免费观看视频| 亚洲欧洲精品一区二区三区| 国产精品丝袜一区| 亚洲欧美综合网| 亚洲摸摸操操av| 亚洲精品写真福利| 亚洲已满18点击进入久久| 亚洲欧美色综合| 在线亚洲欧美专区二区| 一区二区不卡在线播放| 久久亚洲精品国产精品紫薇| 日本精品一区二区三区四区的功能| 一区二区三区在线播放| 久久久久久久久久久电影| 欧美肥妇free| 色综合视频在线观看| 日韩成人av影视| 欧美韩国一区二区| 56国语精品自产拍在线观看| 国产资源在线一区| 精品国产乱码久久久久久老虎| 国产裸体歌舞团一区二区| 国产精品美女久久久久久久久久久 | 精品欧美黑人一区二区三区| 亚洲免费在线看| 成人网页在线观看| 欧美专区亚洲专区| 欧美区一区二区三区| 欧美成人艳星乳罩| 国产精品人人做人人爽人人添| 亚洲丝袜美腿综合| 五月婷婷综合激情| 国产一区久久久| 色婷婷综合中文久久一本| 日韩欧美一区二区久久婷婷| 中文字幕 久热精品 视频在线| 亚洲国产高清在线观看视频| 亚洲激情自拍视频| 亚洲五月六月丁香激情| 另类小说图片综合网| 国产成人精品免费看| 国产成人av福利| 人人超碰91尤物精品国产| 亚洲欧美日韩在线| 日韩av在线发布| 93久久精品日日躁夜夜躁欧美| 色一情一乱一乱一91av| 久久99久久99精品免视看婷婷 | 亚洲国产一区二区在线播放| 国产伦理精品不卡| 水蜜桃久久夜色精品一区的特点| 久久久不卡网国产精品一区| 欧美中文字幕一区| eeuss鲁片一区二区三区| 国产尤物一区二区在线| 麻豆精品久久久| 日韩国产欧美一区二区三区| 亚洲乱码国产乱码精品精小说 | 亚洲永久精品大片| 午夜影视日本亚洲欧洲精品| 欧美一区二区三区在线| 一区二区中文视频| av网站免费线看精品| 91久久国产综合久久| 精品理论电影在线观看 | 成人sese在线| 精品成a人在线观看| 亚洲网友自拍偷拍| 91丨porny丨在线| 中文字幕av不卡|