ホームページ  >  記事  >  バックエンド開発  >  PHPトレイトの静的メンバー、抽象メンバー、属性コードの詳細説明

PHPトレイトの静的メンバー、抽象メンバー、属性コードの詳細説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 11:04:202448ブラウズ

Trait の抽象メンバー

使用されるクラスに要件を強制するために、Trait は抽象メソッドの使用をサポートします。

抽象メソッドを使用して要件を強制する例を示します

<?php
trait Hello {
    public function sayHelloWorld() {
        echo &#39;Hello&#39;.$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 の staticmembers

Traits は、静的メンバーの静的メソッドによって定義できます。

静的変数の例

<?php
trait 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
?>

静的メソッドの例

<?php
trait StaticExample {
    public static function doSomething() {
        return &#39;Doing something&#39;;
    }
}
class Example {
    use StaticExample;
}
Example::doSomething();
?>

静的変数と静的メソッドの例

<?php
trait 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 1
C2::inc(); // echo 1
?>

属性

トレイトは属性も定義できます。

属性の定義例

<?php
trait PropertiesTrait {
    public $x = 1;
}

class PropertiesExample {
    use PropertiesTrait;
}

$example = new PropertiesExample;
$example->x;
?>

トレイトが属性を定義する場合、クラスは同じ名前の属性を定義できません。定義しない場合はエラーが生成されます。クラス内のプロパティの定義が特性内の定義と互換性がある (可視性と初期値が同じ) 場合、エラー レベルは E_STRICT ですが、それ以外の場合は致命的エラーです。

競合の例

<?php
trait PropertiesTrait {
    public $same = true;
    public $different = false;
}

class PropertiesExample {
    use PropertiesTrait;
    public $same = true; // Strict Standards
    public $different = true; // 致命错误
}
?>

使用上の違い

異なる使用の例

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

最初の使用は名前空間に FooTest を使用し、見つかったものは FooTest 、2 番目の使用は特性を使用することで、見つかったものは FooBarFooTest です。

以上がPHPトレイトの静的メンバー、抽象メンバー、属性コードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。