Maison >développement back-end >tutoriel php >Explication détaillée des membres statiques, des membres abstraits et des codes d'attribut des traits PHP

Explication détaillée des membres statiques, des membres abstraits et des codes d'attribut des traits PHP

伊谢尔伦
伊谢尔伦original
2017-07-03 11:04:202493parcourir

Membres abstraits de Trait

Afin d'imposer des exigences sur les classes utilisées, les traits prennent en charge l'utilisation de méthodes abstraites.

Représente un exemple d'application d'exigences via des méthodes abstraites

<?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;
    }
}
?>

Les statiquesmembres

Les traits peuvent être des membres statiques définition de méthode statique.

StatiqueExemples de variables

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

Exemples de méthodes statiques

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

Exemples de variables statiques et de méthodes statiques

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

Attributs

Le trait peut également définir des attributs.

Exemple de définition d'attributs

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

class PropertiesExample {
    use PropertiesTrait;
}

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

Si un trait définit un attribut, la classe ne pourra pas définir un attribut du même nom, sinon une erreur sera générée. Si la définition de la propriété dans la classe est compatible avec sa définition dans le trait (même visibilité et valeur initiale) le niveau d'erreur est E_STRICT, sinon c'est une erreur fatale.

Exemples de conflits

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

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

Différences d'utilisation

Exemples d'utilisations différentes

<?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
}
?>

La première utilisation est l'utilisation pour l'espace de noms FooTest, ce que l'on trouve est FooTest, la deuxième utilisation est d'utiliser un trait, ce que l'on trouve est FooBarFooTest.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn