男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

注解概覽

(PHP 8)

注解功能提供了代碼中的聲明部分都可以添加結構化、機器可讀的元數據的能力, 注解的目標可以是類(lèi)、方法、函數、參數、屬性、類(lèi)常量。 通過(guò) 反射 API 可在運行時(shí)獲取注解所定義的元數據。 因此注解可以成為直接嵌入代碼的配置式語(yǔ)言。

通過(guò)注解的使用,在應用中實(shí)現功能、使用功能可以相互解耦。 某種程度上講,它可以和接口(interface)與其實(shí)現(implementation)相比較。 但接口與實(shí)現是代碼相關(guān)的,注解則與聲明額外信息和配置相關(guān)。 接口可以通過(guò)類(lèi)來(lái)實(shí)現,而注解也可以聲明到方法、函數、參數、屬性、類(lèi)常量中。 因此它們比接口更靈活。

注解使用的一個(gè)簡(jiǎn)單例子:將接口(interface)的可選方法改用注解實(shí)現。 我們假設接口 ActionHandler 代表了應用的一個(gè)操作: 部分 action handler 的實(shí)現需要 setup,部分不需要。 我們可以使用注解,而不用要求所有類(lèi)必須實(shí)現 ActionHandler 接口并實(shí)現 setUp() 方法。 因此帶來(lái)一個(gè)好處——可以多次使用注解。

示例 #1 用注解實(shí)現接口的可選方法

<?php
interface ActionHandler
{
    public function 
execute();
}

#[Attribute]
class SetUp {}

class 
CopyFile implements ActionHandler
{
    public 
string $fileName;
    public 
string $targetDirectory;

    
#[SetUp]
    
public function fileExists()
    {
        if (!
file_exists($this->fileName)) {
            throw new 
RuntimeException("File does not exist");
        }
    }

    
#[SetUp]
    
public function targetDirectoryExists()
    {
        if (!
file_exists($this->targetDirectory)) {
            
mkdir($this->targetDirectory);
        } elseif (!
is_dir($this->targetDirectory)) {
            throw new 
RuntimeException("Target directory $this->targetDirectory is not a directory");
        }
    }

    public function 
execute()
    {
        
copy($this->fileName$this->targetDirectory '/' basename($this->fileName));
    }
}

function 
executeAction(ActionHandler $actionHandler)
{
    
$reflection = new ReflectionObject($actionHandler);

    foreach (
$reflection->getMethods() as $method) {
        
$attributes $method->getAttributes(SetUp::class);

        if (
count($attributes) > 0) {
            
$methodName $method->getName();

            
$actionHandler->$methodName();
        }
    }

    
$actionHandler->execute();
}

$copyAction = new CopyFile();
$copyAction->fileName "/tmp/foo.jpg";
$copyAction->targetDirectory "/home/user";

executeAction($copyAction);
男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站