设为首页 加入收藏

TOP

用C实现PHP扩展类的步骤(五)
2012-11-26 12:35:39 来源: 作者: 【 】 浏览:1693
Tags:实现 PHP 扩展 步骤

 

    }

    PHP_METHOD(Rectangle, setWidth()

    {

    long width;

    if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “l”, &width) == FAILURE){

    WRONG_PARAM_COUNT;

    }

    if( width <= 0 ) {

    width = 1;

    }

    zend_update_property_long(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_width”), width TSRMLS_CC); //更新类成员变量_width的值

    RETURN_TRUE;

    }

    PHP_METHOD(Rectangle, setHeight()

    {

    long height;

    if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “l”, &height) == FAILURE){

    WRONG_PARAM_COUNT;

    }

    if( height <= 0 ) {

    height = 1;

    }

    zend_update_property_long(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_height”), height TSRMLS_CC); //更新类成员变量_height的值

    RETURN_TRUE;

    }

    PHP_METHOD(Rectangle, getWidth)

    {

    zval *zWidth;

    long width;

    zWidth = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_width”), 0 TSRMLS_CC); //获取类成员变量_width的值

    width = Z_LVAL_P(zWidth);

    RETURN_LONG(width);

    }

    PHP_METHOD(Rectangle, getHeight)

    {

    zval *zHeight;

    long height;

    zHeight = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_height”), 0 TSRMLS_CC);

    height = Z_LVAL_P(zHeight);

    RETURN_LONG(height);

    }

    PHP_METHOD(Rectangle, getArea)

    {

    zval *zWidth,*zHeight;

    long width,height,area;

    zWidth = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_width”), 0 TSRMLS_CC);

    zHeight = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_height”), 0 TSRMLS_CC);

    width = Z_LVAL_P(zWidth);

    height = Z_LVAL_P(zHeight);

    area = width * height;

    RETURN_LONG(area);

    }

    PHP_METHOD(Rectangle, getCircle)

    {

    zval *zWidth,*zHeight;

    long width,height,circle;

    zWidth = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_width”), 0 TSRMLS_CC);

    zHeight = zend_read_property(Z_OBJCE_P(getThis()), getThis(), ZEND_STRL(“_height”), 0 TSRMLS_CC);

    width = Z_LVAL_P(zWidth);

    height = Z_LVAL_P(zHeight);

    circle = (width + height) * 2;

    RETURN_LONG(circle);

    }

    4,编译代码

    [php] view plaincopycd php-5.2.8/ext/class_ext

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config

    make

    make install

    此时会在php的安装路径下产生一个so文件,比如

    /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/class_ext.so

    修改php.ini 添加扩展extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”

    [class_ext]

    extension = class_ext.so

    5,测试代码

    [php] view plaincopy$width = -10;

    $height = 12;

    $rectangle = new Rectangle($width, $height);

    $area = $rectangle->getArea();

    var_dump($area);

    $circle = $rectangle->getCircle();

    var_dump($circle);

    $clone = $rectangle->clone();

    $_area = $clone->getArea();

    var_dump($_area);

    $clone->setWidth(100);

    $clone->setHeight(200);

    $_area = $clone->getArea();

    var_dump($_area);

    $width = $clone->getWidth();

    var_dump($width);

    $height = $clone->getHeight();

    var_dump($height);

    结果输出:

    [php] view plaincopyint(12)

    int(26)

    int(12)

    int(20000)

    int(100)

    int(200)

      

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇程序运行中的内存分配 下一篇C语言的位移操作 (左移,右..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: