php trait 的靜態成員、抽象成員、屬性代碼詳解

來源:互聯網
上載者:User

Trait 的抽象成員

為了對使用的類施加強制要求,trait 支援抽象方法的使用。

表示通過抽象方法來進行強制要求的例子

<?phptrait Hello {    public function sayHelloWorld() {        echo 'Hello'.$this->getWorld();    }    abstract public function getWorld();}class MyHelloWorld {    private $world;    use Hello;    public function getWorld() {        return $this->world;    }    public function setWorld($val) {        $this->world = $val;    }}?>

Trait 的靜態成員

Traits 可以被靜態成員靜態方法定義。

靜態變數的例子

<?phptrait Counter {    public function inc() {        static $c = 0;        $c = $c + 1;        echo "$c\n";    }}class C1 {    use Counter;}class C2 {    use Counter;}$o = new C1(); $o->inc(); // echo 1$p = new C2(); $p->inc(); // echo 1?>

靜態方法的例子

<?phptrait StaticExample {    public static function doSomething() {        return 'Doing something';    }}class Example {    use StaticExample;}Example::doSomething();?>

靜態變數和靜態方法的例子

<?phptrait Counter {    public static $c = 0;    public static function inc() {        self::$c = self::$c + 1;        echo self::$c . "\n";    }}class C1 {    use Counter;}class C2 {    use Counter;}C1::inc(); // echo 1C2::inc(); // echo 1?>

屬性

Trait 同樣可以定義屬性。

定義屬性的例子

<?phptrait PropertiesTrait {    public $x = 1;}class PropertiesExample {    use PropertiesTrait;}$example = new PropertiesExample;$example->x;?>

如果 trait 定義了一個屬性,那類將不能定義同樣名稱的屬性,否則會產生一個錯誤。如果該屬性在類中的定義與在 trait 中的定義相容(同樣的可見度和初始值)則錯誤的層級是 E_STRICT,否則是一個致命錯誤。

衝突的例子

<?phptrait PropertiesTrait {    public $same = true;    public $different = false;}class PropertiesExample {    use PropertiesTrait;    public $same = true; // Strict Standards    public $different = true; // 致命錯誤}?>

Use的不同

不同use的例子

<?phpnamespace Foo\Bar;use Foo\Test;  // means \Foo\Test - the initial \ is optional?><?phpnamespace Foo\Bar;class SomeClass {    use Foo\Test;   // means \Foo\Bar\Foo\Test}?>

第一個use是用於 namespace 的 use Foo\Test,找到的是 \Foo\Test,第二個 use 是使用一個trait,找到的是\Foo\Bar\Foo\Test。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.