【php類與對象】匿名類

來源:互聯網
上載者:User

本篇文章給大家分享的內容是關於【php類與對象】匿名類 ,有著一定的參考價值,有需要的朋友可以參考一下

匿名類

PHP 7 開始支援匿名類。

作用:建立一次性的簡單對象

可以傳遞參數到匿名類的構造器,也可以擴充(extend)其他類、實現介面(implement interface),以及像其他普通的類一樣使用 trait:

<?phpclass SomeClass {}interface SomeInterface {}trait SomeTrait {}var_dump(new class(10) extends SomeClass implements SomeInterface {    private $num;    public function __construct($num)    {        $this->num = $num;    }    use SomeTrait;});/*outputs:object(class@anonymous)#1 (1) {  ["Command line code0x104c5b612":"class@anonymous":private]=>  int(10)}*/

匿名類被嵌套進普通 Class 後,不能訪問這個外部類(Outer class)的 private(私人)、protected(受保護)方法或者屬性。
為了訪問外部類(Outer class)protected 屬性或方法,匿名類可以 extend(擴充)此外部類。
為了使用外部類(Outer class)的 private 屬性,必須通過構造器傳進來:

<?phpclass Outer{    private $prop = 1;    protected $prop2 = 2;    protected function func1()    {        return 3;    }    public function func2()    {        return new class($this->prop) extends Outer {            private $prop3;            public function __construct($prop)            {                $this->prop3 = $prop;            }            public function func3()            {                return $this->prop2 + $this->prop3 + $this->func1();            }        };    }}echo (new Outer)->func2()->func3(); //6

聲明的同一個匿名類,所建立的對象都是這個類的執行個體。

匿名類的名稱是通過引擎賦予的,如下例所示。 由於實現的細節,不應該去依賴這個類名。

<?phpecho get_class(new class {});//class@anonymousD:\phpStudy2018\PHPTutorial\WWW\index.php00500020
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.