new class
來建立一個匿名類,與普通類的定義相似,不同點就是不需要設定類名,如下所示:
new class(參數1, 參數2, ...){
成員屬性和方法;
};
<?php $name = new class('C語言中文網'){ private $name; public function __construct($name){ $this->name = $name; } public function output(){ echo $this->name; } }; $name->output(); ?>匿名類可以在一個類的內部方法中宣告,也可以直接賦值給變數。當匿名類被巢狀進普通類後,不能存取這個外部類中使用 private、protected 修飾的方法或者屬性。如果要存取外部類使用 protected 修飾的屬性或方法,可以使用匿名類來繼承此外部類。如果要使用外部類使用 private 修飾的屬性,則必須通過構造器傳進來。
<?php class Brwser{ function open(Websit $url){ $url->run(); } } interface Websit{ function run(); } $chrome = new Brwser; $chrome -> open(new class('http://c.biancheng.net/php/', 'Chrome') implements Websit{ private $url; private $name; function __construct($url, $name){ $this->url = $url; $this->name = $name; } function run(){ echo '在 '.$this->name.' 瀏覽器中開啓:'.$this->url.' <br>'; } }); $firefox = new Brwser; $chrome -> open(new class('http://c.biancheng.net/php/', 'Fire fox') implements Websit{ private $url; private $name; function __construct($url, $name){ $this->url = $url; $this->name = $name; } function run(){ echo '在 '.$this->name.' 瀏覽器中開啓:'.$this->url.' <br>'; } }); ?>執行結果如下:
在 Chrome 瀏覽器中開啓:http://c.biancheng.net/php/
在 Fire fox 瀏覽器中開啓:http://c.biancheng.net/php/
<?php $name = new class('C語言中文網'){ private $name; public function __construct($name){ $this->name = $name; } public function output(){ echo $this->name.'<br>'; } }; echo get_class($name); ?>執行結果如下:
class@anonymousD:\WWW\index.php000001B4597500FD