>  기사  >  백엔드 개발  >  PHP 특성의 정적 멤버, 추상 멤버 및 속성 코드에 대한 자세한 설명

PHP 특성의 정적 멤버, 추상 멤버 및 속성 코드에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-03 11:04:202414검색

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

속성

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.