欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解php8中注解的實(shí)際應(yīng)用

 更新時(shí)間:2023年11月16日 09:53:31   作者:傾聽(tīng)歲月  
學(xué)過(guò)java的同學(xué)應(yīng)該都知道注解的作用,但是在php中注解有什么用呢,其實(shí)就是美化代碼和便于維護(hù)一些類的設(shè)計(jì),下面就跟隨小編一起學(xué)習(xí)一下php8中注解的具體應(yīng)用吧

前言

學(xué)過(guò)java的同學(xué)應(yīng)該都知道注解的作用,但是在php中注解有什么用呢?我的理解就是美化代碼和便于維護(hù)一些類的設(shè)計(jì)。

說(shuō)明

我們先設(shè)計(jì)一個(gè)類,聲明人類的性別

<?php
class Sex
{
	//男人
	const MAN = 1;
	
	//女人
	const WIFE = 2;

	//未知
	const UNKNOWN = 0;
}

由上可知,我們分別設(shè)計(jì)了3個(gè)類型,0=>未知,1=>男人,2=>女人

現(xiàn)在,應(yīng)業(yè)務(wù)需求,我給前端展示的內(nèi)容不能顯示數(shù)字(0,1,2),要展示漢字(未知,男人,女人),數(shù)據(jù)映射在后端完成。 結(jié)合php8引入了枚舉的支持。那么我們重新設(shè)計(jì)如下

<?php

enum Sex : int
{
	//男人
	case MAN = 1;
	
	//女人
	case WIFE = 2;

	//未知
	case UNKNOWN = 0;
	
	public function getDescription() : string
	{
		return match($this)
		{
			self::MAN	=>	'男人',
			self::WIFE  =>  '女人',
			self::UNKNOWN => '未知'
		};
	}
}
echo Sex::MAN->getDescription(); //獲得中文映射

由上可知,是不是看著就簡(jiǎn)單了許多。

但是,還有更直觀的顯示,設(shè)計(jì)會(huì)稍微復(fù)雜一點(diǎn),我們接著慢慢向下看。

我們先設(shè)計(jì)一個(gè)trait,此trait完成注解的反射。

<?php
trait EnumFeature
{
	 /**
	  * 獲取case 注解內(nèi)容
	  * @param string $class 注解類
      * @return null | Object
	  */
	 protected function getTargetCaseReflectionAnnotation(string $class) : mixed
     {
        $reflection = new \ReflectionEnumBackedCase(self::class,$this->name);

        $attributes = $reflection->getAttributes();
        if(empty($attributes))
        {
            return null;
        }

        foreach($attributes as $attribute)
        {
            if($attribute->getName() === $class)
            {
                return $attribute->newInstance();
            }
        }

        return null;
     }
}

在設(shè)計(jì)一個(gè)注解類,讓這個(gè)注解類可以注解 enum - case

<?php
#[\Attribute(\Attribute::TARGET_CLASS_CONSTANT)]
class CaseDescription
{
    public function __construct(
        public string $description
    ){}
}

重構(gòu) enum 設(shè)計(jì)如下

enum Sex : int
{
	use EnumFeature
	
	#[CaseDescription('男人')]
	case MAN = 1;
	
	#[CaseDescription('女人')]
	case WIFE = 2;

	#[CaseDescription('未知')]
	case UNKNOWN = 0;
	
	public function getDescription() : ?string
	{
		//獲取注解示例,并從中獲取 description 屬性
		return $this->getTargetCaseReflectionAnnotation(CaseDescription::class)?->description;
	}
}

這樣看著是否直觀了很多?對(duì)比之前的方案,也便于維護(hù)。

完整版,應(yīng)業(yè)務(wù)需求,不同的性別在頁(yè)面上呈現(xiàn)的性別顏色也不同。

再設(shè)計(jì)一個(gè)Color注解

<?php

#[\Attribute(\Attribute::TARGET_ALL)]
class Color
{
    public function __construct(
        public ?string $value = null
    ){}
}

對(duì)性別進(jìn)行color注解添加

enum Sex : int
{
	use EnumFeature
	
	#[CaseDescription('男人'),Color("#000000")]
	case MAN = 1;
	
	#[CaseDescription('女人'),Color("#FFF000")]
	case WIFE = 2;

	#[CaseDescription('未知'),Color("#CCCCCC")]
	case UNKNOWN = 0;
	
	//獲取中文名稱
	public function getDescription() : ?string
	{
		//獲取注解示例,并從中獲取 description 屬性
		return $this->getTargetCaseReflectionAnnotation(CaseDescription::class)?->description;
	}
	
	//獲取顏色
	public function getColort() : ?string
	{
		return $this->getTargetCaseReflectionAnnotation(Color::class)?->value;
	}
}

以上就是我對(duì)注解的實(shí)際應(yīng)用。當(dāng)然再hyperf 框架中,注解實(shí)際上被賦予了更多的含義(如自動(dòng)注入等高級(jí)功能,類似java的spring容器了)

總結(jié)

以前總覺(jué)得php 語(yǔ)言開(kāi)發(fā)大型項(xiàng)目并不是很適合,但現(xiàn)在php8出來(lái)后,個(gè)人覺(jué)得php8越來(lái)越適合開(kāi)發(fā)大型項(xiàng)目,祝php越來(lái)越好,能夠再眾多的開(kāi)發(fā)語(yǔ)言中再次脫穎而出。php是世界上最好的語(yǔ)言~

到此這篇關(guān)于詳解php8中注解的實(shí)際應(yīng)用的文章就介紹到這了,更多相關(guān)php8注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論