zoukankan      html  css  js  c++  java
  • PHP-CPP开发扩展(四)

    PHP-CPP是一个用于开发PHP扩展的C++库。本节讲解如何在C++中调用PHP函数。

    调用PHP函数

    调用普通函数

    // call a function from user space
    Php::Value data = Php::call("some_function", "some_parameter");
    

    调用类里方法:

    // create an object (this will also call __construct())
    Php::Object time("DateTime", "now");
    
    // call a method on the datetime object
    Php::out << time.call("format", "Y-m-d H:i:s") << std::endl;
    

    下面通过一个综合示例来说明:

    /**
     * User: 公众号: 飞鸿影的博客(fhyblog)
     * Date: 2018/7
     */
    
    #include <phpcpp.h>
    
    void test_call(Php::Parameters &params){
    
        Php::Value v;
    
        //调用普通方法
        v = Php::call("md5", "test");
        Php::out << v << std::endl;
    
        //实例化PHP类并调用类里的方法
        Php::Object time("Datetime", "now");
        v = time.call("format", "Y-m-d H:i:s");
        Php::out << v << std::endl;
    
        //形参是PHP类,调用其方法
        Php::Value datetime = params[0];
        v = datetime.call("format", "Y-m-d");
        Php::out << v << std::endl;
    
        //形参是匿名函数
        Php::Value callback = params[1];
        callback("param1", "param2");
    
        //给已知对象的成员方法起别名
        Php::Array format_alias({datetime, "format"});
        Php::out << format_alias("Y-m-d H") << std::endl;
    
        //普通方法别名
        Php::Value time_alias("time");
        Php::out << time_alias() << std::endl;
    }
    
    extern "C" {
        PHPCPP_EXPORT void *get_module() {
            static Php::Extension extension("helloworld", "1.0.0");
            extension.add<test_call>("test_call");
            
            return extension;
        }
    }
    

    我们使用test.php进行测试:

    <?php
    test_call(new DateTime(), function($a, $b){
        var_dump($a, $b);
    });
    

    输出:

    098f6bcd4621d373cade4e832627b4f6
    2018-07-15 09:43:23
    2018-07-15
    string(6) "param1"
    string(6) "param2"
    2018-07-15 09
    1531619003
    

    (未完待续)

    想第一时间获取最新动态,欢迎关注关注飞鸿影的博客(fhyblog),不定期为您呈现技术干货。

  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/52fhy/p/9351860.html
Copyright © 2011-2022 走看看