백엔드 개발 PHP 튜토리얼 익명 함수(클로저 기능)부터 PHP 디자인 패턴 컨테이너 패턴까지

익명 함수(클로저 기능)부터 PHP 디자인 패턴 컨테이너 패턴까지

Apr 11, 2019 am 11:24 AM
PHP 디자인 패턴 익명 함수

익명 함수(클로저 함수)

익명 함수(클로저 함수라고도 함)를 사용하면 The 없이 함수를 임시로 생성할 수 있습니다. 지정된 이름의 함수는 콜백 함수 매개변수의 값으로 사용되는 경우가 많으며, 변수의 값으로도 사용할 수 있습니다. 구체적인 사용법은 다음 예제 코드를 참조하세요.

/* 示例一:声明一个简单匿名函数,并赋值给一个变量,通过变量名调用这个匿名函数 */
$anonFunc = function($param){    
    echo $param;
}; 
$anonFunc('这里是一个匿名函数');  // 通过变量名调用匿名函数,和普通函数没什么区别

/* 示例二:通过在函数内部使用匿名函数动态创建函数 */
function operate($operator){
    if($operator == '+'){
        return function($a, $b){
            return $a + $b;
        }
    }
    if($operator == '-'){
        return function($a, $b){
            return $a - $b;
        }
    }
}
$add = operate('+');
echo $add(4, 3);    // 7
$sub = operate('-');
echo $sub(4, 3);    // 1
/* 示例三:匿名函数作为回调函数参数传入 */
function callback($callback){
    $callback();
}
function callback(){
    // 闭包测试函数
    echo '这里是闭包测试函数体';
}
로그인 후 복사

위 코드의 세 가지 예제에서 익명 함수는 매개변수를 전달하지 않습니다. 상위 함수 매개변수 변수는 하위 함수에서 직접 사용할 수 있지만 PHP 언어에서는 동일한 목적을 달성하려면 use($var) 키워드(코드 사용법 참고)를 사용해야 합니다. 위 코드의 예제 3을 다음과 같이 수정합니다.

/* 示例三修改:匿名函数作为参数传入,并且携带参数 */
function callback($callback) use ($content){
    $callback($content);
}
$content = '这里是闭包函数的输出内容';
function callback($content){
    // 闭包函数
    echo $content;
}
로그인 후 복사

위 코드의 예제 2에서는 use 키워드를 사용하여 상위 함수의 외부 변수에 대한 익명 함수의 참조를 구현할 수도 있습니다. . 이 샘플 코드에서 익명 함수와 클로저 기능을 사용하는 것은 개념을 이해하기 위한 것일 뿐 실제적인 의미는 크지 않습니다. 클로저는 다양한 용도로 사용되며 PHP에서 컨테이너 모드의 DI(종속성 주입)에 가장 일반적으로 사용됩니다. 뼈대.

PHP 객체지향 컨테이너 패턴

이름에서 알 수 있듯이 컨테이너는 물건을 저장하는 데 사용됩니다. 실제로는 선언하는 것입니다. 사물을 저장하는 데 특별히 사용되는 클래스입니다. 객체 인스턴스를 가져옵니다. 이 경우 컨테이너에 종속성을 바인딩하고 컨테이너에서 종속성을 얻으려면 컨테이너에 두 개 이상의 핵심 메서드가 있어야 합니다. 컨테이너는 종속성 관리 도구라고 할 수 있으며 서비스 컨테이너라고도 합니다.

/* 声明一个简单的容器类 */
class Container{
    private $_diList = array();    // 用于存放依赖

    /* 核心方法之一,用于绑定服务
    * @param string $className 类名称
    * @param mixed $concrete 依赖在容器中的存储方式,可以是类名字符串,数组,一个实例化对象,或者是一个匿名函数
    */
    puclic function set($className, $concrete){

            $this->_diList[$className] = $concrete;   
    }

    /* 
    * 核心方法之二,用于获取服务对象 
    * @param string $className 将要获取的依赖的名称
    * @return object 返回一个依赖的实例化对象
    */
    public function get($className){
        if(isset($this->_diList[$className])){
            return $this->diList[$className];
        }    
        return null;
    }
}
로그인 후 복사

위 코드는 간단한 컨테이너 패턴으로, 종속성을 등록하기 위해 set 메소드를 사용하고, 종속성을 얻기 위해 get 메소드를 사용합니다. 컨테이너가 종속성을 저장하는 방법에는 여러 가지가 있습니다. 다음 예제 코드에서는 익명 함수를 예시로 사용합니다.

/* 数据库连接类 */
class Connection{
    public function __construct($dbParams){
        // connect the database...    
    }
    public someDbTask(){
        // code...
    }
}
/* 会话控制类 */
class Session{
    public function openSession(){
        session_start();
    }
    // code...
}
$container->set('session', function(){
    return new Session();
});

$container = new Container();
// 使用容器注册数据库连接服务
$container->set('db', function(){
    return new Connetion(array(  
        "host" => "localhost",  
        "username" => "root",  
        "password" => "root",  
        "dbname" => "dbname"  
    ));
});
// 使用容器注册会话控制服务
$container->set('session', function(){
    return new Session();
});
// 获取之前注册到容器中的服务,并进行业务的处理
$container->get('db')->someDbTask();
$container->get('session')->openSession();
로그인 후 복사

위의 코드는 db와 session 두 가지 서비스가 등록된 컨테이너 사용 방법입니다. 여기서는 익명 함수를 종속 저장 방식으로 사용하고 $container->set를 사용합니다. () 메소드가 호출되는데, 서비스 등록 시에는 실제로 인스턴스화되지 않고, 대신 종속성을 얻기 위해 $container->get() 메소드가 호출될 때 익명 함수가 실행되어 인스턴스화된 객체가 반환됩니다. 주문형 인스턴스화를 달성합니다. 인스턴스화가 없으면 프로그램의 실행 효율성이 향상됩니다.

위 내용은 익명 함수(클로저 기능)부터 PHP 디자인 패턴 컨테이너 패턴까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C++ 익명 함수의 사용법과 특징 C++ 익명 함수의 사용법과 특징 Apr 19, 2024 am 09:03 AM

람다 식이라고도 하는 익명 함수는 이름을 지정하지 않고 일회용으로 사용하거나 함수 포인터를 전달하는 데 사용되는 함수입니다. 기능에는 익명성, 일회용 사용, 폐쇄, 반환 유형 추론이 포함됩니다. 실제로는 정렬이나 기타 일회성 함수 호출에 자주 사용됩니다.

Golang 함수의 익명 함수 적용 시나리오 분석 Golang 함수의 익명 함수 적용 시나리오 분석 May 16, 2023 pm 10:51 PM

최신 프로그래밍 언어인 Golang(Go 언어라고도 함)에는 많은 강력한 기능이 있습니다. 그 중 익명 함수는 Golang에서 매우 중요한 개념이며 다양한 시나리오에서 널리 사용됩니다. 이 기사에서는 Golang 함수에서 익명 함수의 적용 시나리오를 심층적으로 분석합니다. 이벤트 핸들러 이벤트 핸들러에서 익명 함수는 매우 편리하고 실용적인 도구입니다. 사용자 정의 로직은 funcmain(){bt와 같은 익명 함수를 통해 이벤트 핸들러에 전달될 수 있습니다.

보다 유연한 코드 논리 처리를 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? 보다 유연한 코드 논리 처리를 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? Oct 21, 2023 am 10:21 AM

보다 유연한 코드 논리 처리를 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? PHP7 이전에는 함수를 사용하여 특정 로직 부분을 캡슐화한 다음 코드에서 이러한 함수를 호출하여 특정 기능을 구현하는 경우가 많았습니다. 그러나 때로는 코드에서 일부 임시 논리 블록을 정의해야 할 수도 있습니다. 이러한 논리 블록은 독립적인 함수를 생성할 필요가 없으며 동시에 코드에 너무 많은 전역 변수를 도입하고 싶지 않습니다. PHP7에는 이 문제를 매우 잘 해결할 수 있는 익명 함수와 클로저가 도입되었습니다. 익명 함수는 이름이 없는 함수입니다.

Golang 익명 함수는 여러 값을 반환할 수 있나요? Golang 익명 함수는 여러 값을 반환할 수 있나요? Apr 13, 2024 pm 04:09 PM

예, Go 언어의 익명 함수는 여러 값을 반환할 수 있습니다. 구문: func(arg1,arg2,...,argN)(ret1,ret2,...,retM){//함수 본문}. 사용법: 반환 값을 받으려면 := 연산자를 사용하고, 여러 값을 반환하려면 return 키워드를 사용하세요.

PHP8.0의 익명 함수 PHP8.0의 익명 함수 May 14, 2023 am 08:31 AM

PHP8.0은 PHP 프로그래밍 언어의 최신 버전입니다. 중요한 업데이트 중 하나는 익명 기능의 개선 및 향상입니다. 익명 함수(클로저라고도 함)는 런타임에 동적으로 생성되어 다른 함수에 전달되거나 변수에 저장될 수 있는 특수한 유형의 함수입니다. PHP에서 익명 함수는 고급 프로그래밍 및 웹 개발에 매우 ​​중요합니다. PHP8.0은 익명 함수를 더욱 유연하고 사용하기 쉽게 만드는 몇 가지 새로운 구문과 기능을 제공합니다. 일부 업데이트는 다음과 같습니다: PHP8.0의 함수 매개변수에 대한 유형 선언,

Python 람다 표현식: 프로그래밍을 더 쉽게 만들기 Python 람다 표현식: 프로그래밍을 더 쉽게 만들기 Feb 19, 2024 pm 09:54 PM

Python Lambda 표현식은 변수에 표현식을 저장하고 해당 값을 반환하는 작은 익명 함수입니다. 람다 표현식은 별도의 함수를 작성하여 수행할 수 있는 간단한 작업을 수행하는 데 자주 사용되지만, 람다 표현식을 사용하면 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다. Lambda 표현식의 구문은 다음과 같습니다. 람다 인수: 표현식 인수는 람다 표현식에서 수신한 매개변수 목록이고 표현식은 실행해야 하는 코드가 포함된 람다 표현식의 본문입니다. 예를 들어 다음 Lambda 표현식은 두 숫자를 더하고 해당 합계를 반환합니다.

보다 유연하고 재사용 가능한 코드 로직을 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? 보다 유연하고 재사용 가능한 코드 로직을 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? Oct 24, 2023 am 10:30 AM

보다 유연하고 재사용 가능한 코드 로직을 달성하기 위해 PHP7의 익명 함수 및 클로저를 사용하는 방법은 무엇입니까? PHP 프로그래밍 세계에서 익명 함수와 클로저는 매우 귀중하고 강력한 도구입니다. PHP7에는 익명 함수와 클로저를 보다 편리하고 유연하게 사용할 수 있는 몇 가지 새로운 언어 기능이 도입되었습니다. 이 기사에서는 PHP7의 익명 함수 및 클로저를 사용하여 보다 유연하고 재사용 가능한 코드 논리를 달성하는 방법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. 익명 함수 익명 함수는 이름이 없는 함수입니다. PHP에서는 익명을 사용할 수 있습니다

Python 람다 표현식: 축약형, 간결함, 강력함 Python 람다 표현식: 축약형, 간결함, 강력함 Feb 19, 2024 pm 08:10 PM

pythonLambda 표현식은 간결하고 읽기 쉽고 사용하기 쉬운 코드를 생성하기 위한 강력하고 유연한 도구입니다. 다른 함수에 인수로 전달되거나 변수에 저장될 수 있는 익명 함수를 빠르게 생성하는 데 유용합니다. Lambda 표현식의 기본 구문은 다음과 같습니다.lambdaarguments:expression예를 들어 다음 Lambda 표현식은 두 개의 숫자를 추가합니다.lambdax,y:x+y 이 Lambda 표현식은 다음과 같이 다른 함수에 인수로 전달될 수 있습니다. defsum( x ,y):returnx+yresult=sum(lambdax,y:x+y,1,2)이 예에서는

See all articles