>  기사  >  백엔드 개발  >  PHP 특성에 대한 심층 분석

PHP 특성에 대한 심층 분석

王林
王林앞으로
2019-08-20 16:59:242953검색

PHP5.4.0부터 PHP는 trait라는 코드 재사용 방법을 구현했습니다. trait

众所周知,PHP中是单继承的,trait是为类似PHP的单继承语言而准备得一种代码复用机制。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。trait和class组合的语义定义了一种减少复杂性的方式,避免传统多继承问题。

traitclass相似,但仅仅在用细粒度和一致的方式来组合功能。无法通过trait自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个class之间不需要继承。

推荐PHP视频教程:https://www.php.cn/course/list/29/type/2.html

1、简单的例子

首先我们举个例子来介绍trait,和类定义相似,但使用关键字trait定义。在类中使用use组合。

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
    public function t2(){
        return &#39;t2&#39;;
    }
}
class Demo{
    use T;
    public function test(){
        return &#39;test&#39;;
    }多个
}
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

输出结果:

t1

test

2、多个trait冲突解决

如果使用多个trait,但是出现了方法名相同,这就出现了冲突,就要手动指定使用哪个trait的方法,使用insteadof关键字实现。

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

输出结果:

t1

test

在冲突的时候,也可以使用use定义方法别名解决冲突,例子如下:

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
        T2::t1 as new_t1;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->new_t1(),&#39;</br>&#39;;
echo $demo->test();

输出结果:

t1

t3

test

3、改变访问权限

也可以使用use

우리 모두 알고 있듯이 PHP는 단일 상속을 가지며 특성은 PHP와 같은 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 특성은 단일 상속 언어의 제약을 줄이고 개발자가 다양한 계층 내 독립 클래스의 메서드를 자유롭게 재사용할 수 있도록 설계되었습니다. 특성 및 클래스 구성의 의미는 복잡성을 줄이고 전통적인 다중 상속 문제를 방지하는 방법을 정의합니다.

traitclass와 유사하지만 기능을 세밀하고 일관된 방식으로만 결합합니다. 특성 자체를 통해 인스턴스화할 수 없습니다. 이는 전통적인 상속에 수평적 기능의 조합을 추가합니다. 즉, 애플리케이션의 여러 클래스 간에 상속이 필요하지 않습니다.

PHP 특성에 대한 심층 분석추천 PHP 비디오 튜토리얼: https://www.php.cn/ course/list/29/type/2.html

1. 간단한 예

먼저 클래스 정의와 유사하지만 키워드 특성 정의를 사용하는 특성을 소개하는 예를 제공합니다. 수업에서는 조합을 사용하세요.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
class Demo{
    use T{
        t2 as protected;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->t2(),&#39;</br>&#39;;
echo $demo->test();

출력 결과:

t1

test

2. 다중 특성 충돌 해결🎜🎜🎜여러 특성을 사용했지만 메소드 이름이 동일한 경우 충돌이 발생합니다. , insideof 키워드를 사용하여 사용할 특성 메서드를 수동으로 지정해야 합니다. 🎜rrreee🎜출력 결과: 🎜🎜t1🎜🎜test🎜🎜충돌이 발생하는 경우 메소드 별칭을 정의하여 충돌을 해결할 수도 있습니다. 예는 다음과 같습니다. 🎜rrreee🎜출력 결과: 🎜🎜t1🎜🎜 t3🎜🎜test🎜🎜3. 액세스 권한 변경🎜🎜🎜 use 키워드를 사용하여 메소드의 액세스 권한을 변경할 수도 있습니다. 🎜rrreee🎜출력 결과: 🎜🎜🎜🎜🎜위 지식은 일반적으로 사용되는 몇 가지 기능을 소개합니다. 자세한 내용은 공식 매뉴얼을 참조하세요: 🎜🎜🎜https://www.php.net/manual/zh/언어.oop5 .traits.php 🎜🎜🎜🎜PHP와 관련된 더 많은 질문을 보려면 PHP 중국어 웹사이트를 방문하세요: 🎜https://www.php.cn/🎜🎜🎜감사합니다! 🎜

위 내용은 PHP 특성에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제