Trait의 추상 멤버
사용된 클래스에 대한 요구 사항을 적용하기 위해 특성은 추상 메서드 사용을 지원합니다.
추상 메서드를 통해 요구 사항을 적용하는 예를 나타냅니다.
<?php trait 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의 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 'Doing something'; } } 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 ?>
Trait는 속성을 정의할 수도 있습니다.
속성 정의 예
<?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이고, 두 번째 용도는 특성을 사용하는 것이고, 찾은 것은 FooBarFooTest입니다.
위 내용은 PHP 특성의 정적 멤버, 추상 멤버 및 속성 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!