Beispiel #1
0
static int vector_div(zval *result, zval *vec, double value) /* {{{ */
{
	zval *d1;
	zval rv;
	zend_class_entry *ce = Z_OBJCE_P(vec);

	INIT_VECTOR_OBJ(result, ce);

	if (ce == vector4_ce) {
		d1 = zend_read_property(ce, vec, "w", 1, 0, &rv);
		zend_update_property_double(ce, result, "w", 1, Z_DVAL_P(d1) / value);
	}

	if (ce == vector4_ce || ce == vector3_ce) {
		d1 = zend_read_property(ce, vec, "z", 1, 0, &rv);
		zend_update_property_double(ce, result, "z", 1, Z_DVAL_P(d1) / value);
	}

	d1 = zend_read_property(ce, vec, "y", 1, 0, &rv);
	zend_update_property_double(ce, result, "y", 1, Z_DVAL_P(d1) / value);

	d1 = zend_read_property(ce, vec, "x", 1, 0, &rv);
	zend_update_property_double(ce, result, "x", 1, Z_DVAL_P(d1) / value);

	return SUCCESS;
}
Beispiel #2
0
static int vector_sub(zval *result, zval *vec1, zval *vec2) /* {{{ */
{
	zval *d1, *d2;
	zval rv;
	zend_class_entry *ce = Z_OBJCE_P(vec1);

	INIT_VECTOR_OBJ(result, ce);

	if (ce == vector4_ce) {
		d1 = zend_read_property(ce, vec1, "w", 1, 0, &rv);
		d2 = zend_read_property(ce, vec2, "w", 1, 0, &rv);
		zend_update_property_double(ce, result, "w", 1, Z_DVAL_P(d1) - Z_DVAL_P(d2));
	}

	if (ce == vector4_ce || ce == vector3_ce) {
		d1 = zend_read_property(ce, vec1, "z", 1, 0, &rv);
		d2 = zend_read_property(ce, vec2, "z", 1, 0, &rv);
		zend_update_property_double(ce, result, "z", 1, Z_DVAL_P(d1) - Z_DVAL_P(d2));
	}

	d1 = zend_read_property(ce, vec1, "y", 1, 0, &rv);
	d2 = zend_read_property(ce, vec2, "y", 1, 0, &rv);
	zend_update_property_double(ce, result, "y", 1, Z_DVAL_P(d1) - Z_DVAL_P(d2));

	d1 = zend_read_property(ce, vec1, "x", 1, 0, &rv);
	d2 = zend_read_property(ce, vec2, "x", 1, 0, &rv);
	zend_update_property_double(ce, result, "x", 1, Z_DVAL_P(d1) - Z_DVAL_P(d2));

	return SUCCESS;
}
Beispiel #3
0
PHP_METHOD(Vector2, __construct)
{
	double x, y;

	if (zend_parse_parameters(ZEND_NUM_ARGS(), "dd", &x, &y) == FAILURE) {
		return;
	}

	return_value = getThis();

	zend_update_property_double(vector2_ce, return_value, "x", 1, x);
	zend_update_property_double(vector2_ce, return_value, "y", 1, y);
}
Beispiel #4
0
static PHP_METHOD(Hello, updateProperties) {

    zval *obj;
    obj = getThis();

    zend_update_property_string(hello_ce, obj, "name", sizeof("name") -1, "name-update" TSRMLS_CC);//更新属性值, $this->name = name
    zend_update_property_long(hello_ce, obj, "age", sizeof("age") -1, 10 TSRMLS_CC); //this->age = age
    zend_update_property_string(hello_ce, obj, "last_name", sizeof("last_name") -1, "leon-update" TSRMLS_CC);//this->last_name = "leon"
    zend_update_property_null(hello_ce, obj, "first_name", sizeof("first_name") - 1 TSRMLS_CC); //this->first_name = null;
    zend_update_property_bool(hello_ce, obj, "sex", sizeof("sex") -1, 0 TSRMLS_CC); //this->sex = true
    zend_update_property_double(hello_ce, obj, "score", sizeof("score") -1, 15.50 TSRMLS_CC); //this->score = 12.50
}
Beispiel #5
0
//返回object类型
static PHP_FUNCTION(return_object) {
  object_init(return_value);//$ret = new stdClass;
  zend_update_property_double(NULL, return_value, "e", strlen("e"), 2.718281828459 TSRMLS_CC); //$ret->e = 2.718281828459
  add_property_string(return_value, "a", "hello world!", 1); //$ret->a = "hello world!";
}