@@ -455,82 +455,18 @@ PHP_MINFO_FUNCTION(redis)
455455 Public constructor */
456456PHP_METHOD (Redis , __construct )
457457{
458+ HashTable * opts = NULL ;
458459 redis_object * redis ;
459- zend_string * zkey ;
460- zval * val , * opts = NULL ;
461460
462- if (zend_parse_parameters (ZEND_NUM_ARGS (), "|a" , & opts ) == FAILURE ) {
463- RETURN_THROWS ();
464- }
461+ ZEND_PARSE_PARAMETERS_START (0 , 1 )
462+ Z_PARAM_OPTIONAL
463+ Z_PARAM_ARRAY_HT_OR_NULL (opts )
464+ ZEND_PARSE_PARAMETERS_END_EX (RETURN_THROWS ());
465465
466- if (opts != NULL ) {
467- redis = PHPREDIS_ZVAL_GET_OBJECT (redis_object , getThis ());
468- redis -> sock = redis_sock_create ("127.0.0.1" , sizeof ("127.0.0.1" ) - 1 , 6379 , 0 , 0 , 0 , NULL , 0 );
469-
470- ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL_P (opts ), zkey , val ) {
471- if (zkey == NULL ) {
472- continue ;
473- }
474- ZVAL_DEREF (val );
475- if (zend_string_equals_literal_ci (zkey , "host" )) {
476- if (Z_TYPE_P (val ) != IS_STRING ) {
477- REDIS_VALUE_EXCEPTION ("Invalid host" );
478- RETURN_THROWS ();
479- }
480- zend_string_release (redis -> sock -> host );
481- redis -> sock -> host = zval_get_string (val );
482- } else if (zend_string_equals_literal_ci (zkey , "port" )) {
483- if (Z_TYPE_P (val ) != IS_LONG ) {
484- REDIS_VALUE_EXCEPTION ("Invalid port" );
485- RETURN_THROWS ();
486- }
487- redis -> sock -> port = zval_get_long (val );
488- } else if (zend_string_equals_literal_ci (zkey , "connectTimeout" )) {
489- if (Z_TYPE_P (val ) != IS_LONG && Z_TYPE_P (val ) != IS_DOUBLE ) {
490- REDIS_VALUE_EXCEPTION ("Invalid connect timeout" );
491- RETURN_THROWS ();
492- }
493- redis -> sock -> timeout = zval_get_double (val );
494- } else if (zend_string_equals_literal_ci (zkey , "readTimeout" )) {
495- if (Z_TYPE_P (val ) != IS_LONG && Z_TYPE_P (val ) != IS_DOUBLE ) {
496- REDIS_VALUE_EXCEPTION ("Invalid read timeout" );
497- RETURN_THROWS ();
498- }
499- redis -> sock -> read_timeout = zval_get_double (val );
500- } else if (zend_string_equals_literal_ci (zkey , "persistent" )) {
501- if (Z_TYPE_P (val ) == IS_STRING ) {
502- if (redis -> sock -> persistent_id ) zend_string_release (redis -> sock -> persistent_id );
503- redis -> sock -> persistent_id = zval_get_string (val );
504- redis -> sock -> persistent = 1 ;
505- } else {
506- redis -> sock -> persistent = zval_is_true (val );
507- }
508- } else if (zend_string_equals_literal_ci (zkey , "retryInterval" )) {
509- if (Z_TYPE_P (val ) != IS_LONG && Z_TYPE_P (val ) != IS_DOUBLE ) {
510- REDIS_VALUE_EXCEPTION ("Invalid retry interval" );
511- RETURN_THROWS ();
512- }
513- redis -> sock -> retry_interval = zval_get_long (val );
514- } else if (zend_string_equals_literal_ci (zkey , "ssl" )) {
515- if (redis_sock_set_stream_context (redis -> sock , val ) != SUCCESS ) {
516- REDIS_VALUE_EXCEPTION ("Invalid SSL context options" );
517- RETURN_THROWS ();
518- }
519- } else if (zend_string_equals_literal_ci (zkey , "auth" )) {
520- if (Z_TYPE_P (val ) != IS_STRING && Z_TYPE_P (val ) != IS_ARRAY ) {
521- REDIS_VALUE_EXCEPTION ("Invalid auth credentials" );
522- RETURN_THROWS ();
523- }
524- redis_sock_set_auth_zval (redis -> sock , val );
525- } else if (zend_string_equals_literal_ci (zkey , "backoff" )) {
526- if (redis_sock_set_backoff (redis -> sock , val ) != SUCCESS ) {
527- REDIS_VALUE_EXCEPTION ("Invalid backoff options" );
528- RETURN_THROWS ();
529- }
530- } else {
531- php_error_docref (NULL , E_WARNING , "Skip unknown option '%s'" , ZSTR_VAL (zkey ));
532- }
533- } ZEND_HASH_FOREACH_END ();
466+ redis = PHPREDIS_ZVAL_GET_OBJECT (redis_object , getThis ());
467+ redis -> sock = redis_sock_create (ZEND_STRL ("127.0.0.1" ), 6379 , 0 , 0 , 0 , NULL , 0 );
468+ if (opts != NULL && redis_sock_configure (redis -> sock , opts ) != SUCCESS ) {
469+ RETURN_THROWS ();
534470 }
535471}
536472/* }}} */
0 commit comments