>  기사  >  백엔드 개발  >  PHP 확장 개발: 자체 인터페이스 클래스 개발

PHP 확장 개발: 자체 인터페이스 클래스 개발

不言
不言원래의
2018-04-13 16:23:161680검색

이 글의 내용은 PHP 확장 개발에서 자체적인 인터페이스 클래스를 개발하는 것에 관한 것입니다. 이는 특정 참조 가치가 있습니다. 도움이 필요한 친구가 참조할 수 있습니다.

PHP 확장은 고급 PHP 프로그래머가 처음으로 이해해야 할 기술 중 하나입니다. PHP 확장 개발자는 어떻게 성숙한 확장을 개발하고 PHP 개발의 고급 분야에 들어갈 수 있습니까? 이 개발 튜토리얼 시리즈는 초보 단계부터 고급 단계까지 단계별로 안내합니다.
이 튜토리얼 시리즈는 Linux(centos 권장)에서 개발되었으며, PHP 버전은 5.6이며, 귀하가 특정 Linux 운영 경험과 c/c++ 기초를 가지고 있다고 가정합니다.
질문이 있거나 소통이 필요한 경우 QQ 기술 교류 그룹 32550793에 가입하여 저와 소통하세요.

이전 장에서는 PHP 확장에서 일반 함수를 내보내는 방법을 설명했습니다. 이번 장에서는 확장에서 클래스를 내보내는 방법을 소개합니다. PHP가 스크립트 확장의 C++ 클래스에 직접 액세스할 수 있도록 합니다.

1. PHP 확장에서 C++ 클래스를 내보내는 방법

다음은 PHP-CPP를 사용하여 개발된 확장 뼈대 코드입니다. 데모 C++ 클래스를 내보낼 수 있습니다.

프로젝트 소스코드는 github에서 확인하실 수 있으며, git 클라이언트를 이용하시거나 URL을 열어 패키징 및 다운로드하실 수 있습니다.

# git clone https://github.com/elvisszhang/phpcpp_counter.git

이제 클래스 이름은 Counter입니다. 확장에 클래스를 등록하는 구문은 다음과 같습니다.

Php::Class7291a602fab93c84dabbc8532a6a1d6e counter("Counter");

Counter 클래스에 increment라는 함수가 있습니다. 다음 구문을 사용하여 확장에 PHP 스크립트를 허용하도록 지시합니다. 이 기능에 액세스하세요.

counter.method78b504f69415d8c8003c96fef61971c4 ("increment");

main.cpp의 C++ 소스코드는 다음과 같습니다.

#include <phpcpp.h>
#include <time.h>

//扩展的导出类 Counter
class Counter : public Php::Base
{
private:
    int _value = 0;
public:
    Counter() = default;
    virtual ~Counter() = default;
    //类的普通成员函数
    Php::Value increment() { return ++_value; }
    Php::Value decrement() { return --_value; }
    Php::Value value() const { return _value; }
    //类的静态成员函数
    static Php::Value gettime() {return time();}
};

//告诉编译器get_module是个纯C函数
extern "C" {
    //get_module是扩展的入口函数
    PHPCPP_EXPORT void *get_module() {
        static Php::Extension myExtension("counter", "1.0.0");
        
        //初始化导出类
        Php::Class<Counter> counter("Counter");
        
        //注册导出类的可访问普通函数
        counter.method<&Counter::increment> ("increment");
        counter.method<&Counter::decrement> ("decrement");
        counter.method<&Counter::value> ("value");
        
        //注册导出类的可访问静态函数
        counter.method<&Counter::gettime>("gettime");

        //注册导出类,使用右值引用方式,优化资源使用
        myExtension.add(std::move(counter));
        
        //返回扩展对象指针
        return myExtension;
    }
}

위 예시에 해당하는 php 테스트 코드는 다음과 같습니다.

<?php
$counter = new Counter;
echo &#39;result of increment() = &#39;. $counter->increment() . PHP_EOL;
echo &#39;result of increment() = &#39;. $counter->increment() . PHP_EOL;
echo &#39;result of decrement() = &#39;. $counter->decrement() . PHP_EOL;
echo &#39;result of value() = &#39;. $counter->value() . PHP_EOL;
echo &#39;result of gettime() = &#39;. Counter::gettime() . PHP_EOL;
?>

위 PHP 코드를 실행한 후 출력되는 정보는 다음과 같습니다.

result of increment() = 1
result of increment() = 2
result of decrement() = 1
result of value() = 1
result of gettime() = 1523363778

2. 확장 클래스의 일반 함수에서 지원하는 스타일

확장 클래스의 함수는 특정 사양에 따라 작성해야 하며 반환 값 및 매개 변수의 이름과 유형이 모두 지정됩니다. 그렇지 않으면 PHP 스크립트에서 인식되지 않습니다.

가장 일반적인 것은 다음 네 가지 함수 스타일로, 실제로 이전 장의 일반 함수 스타일과 유사합니다. 반환 값과 매개 변수의 사용법은 완전히 동일하므로 자세히 설명하지 않겠습니다.

// signatures of supported regular methods
void        YourClass::example1();
void        YourClass::example2(Php::Parameters &params);
Php::Value  YourClass::example3();
Php::Value  YourClass::example4(Php::Parameters &params);

또한 함수에 const 수정자가 있는 경우. 아래에도 4가지 스타일이 있습니다.

void        YourClass::example5() const;
void        YourClass::example6(Php::Parameters &params) const;
Php::Value  YourClass::example7() const;
Php::Value  YourClass::example8(Php::Parameters &params) const;

3. 참고자료

PHP-CPP 도움말: 클래스 및 객체


PHP 확장은 초보 PHP 확장 개발자가 이해해야 할 기술 중 하나입니다. 본격적인 확장을 통해 PHP 개발의 고급 영역으로 들어가시겠습니까? 이 개발 튜토리얼 시리즈는 초보 단계부터 고급 단계까지 단계별로 안내합니다.
이 튜토리얼 시리즈는 Linux(centos 권장)에서 개발되었으며, PHP 버전은 5.6이며, 귀하가 특정 Linux 운영 경험과 c/c++ 기초를 가지고 있다고 가정합니다.
질문이 있거나 소통이 필요한 경우 QQ 기술 교류 그룹 32550793에 가입하여 저와 소통하세요.


이전 장에서는 PHP 확장에서 일반 함수를 내보내는 방법을 설명했습니다. 이번 장에서는 확장에서 클래스를 내보내는 방법을 소개합니다. PHP가 스크립트 확장의 C++ 클래스에 직접 액세스할 수 있도록 합니다.

관련 추천 :

PHP 확장 개발을 위한 관련 개발 기술 비교 및 ​​소개

첫 번째 확장 hello world 작성을 위한 PHP 확장 개발

자체 수학 함수 라이브러리 개발을 위한 PHP 확장 개발


위 내용은 PHP 확장 개발: 자체 인터페이스 클래스 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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