2013-03-09 3 views
0

Я использую плагин для WordPress, который использует «goto output»; что вызывает проблемы у некоторых моих друзей, которые используют PHP 5.3. Они также хотели бы использовать плагин, который я нашел, называемый MiniPress.Альтернатива PHP «goto output»;

Как этот плагин может быть переписан, чтобы он работал в PHP 5.3?

private static function get_filesystem() { 
    if (false === self::$fs) { 
     global $wp_filesystem; 

     require_once(ABSPATH . 'wp-admin/includes/file.php'); 

     $write_method = get_filesystem_method(array(), false); 
     if ($write_method != 'direct' && $write_method != 'ftpsockets') { 
      self::$fs = false; 
      goto output; 
     } 

     if (false === ($creds = @request_filesystem_credentials(''))) { 
      self::$fs = false; 
      goto output; 
     } 

     if (! WP_Filesystem($creds)) { 
      self::$fs = false; 
      goto output; 
     } 

     self::$fs = $wp_filesystem; 
    } 

    output: 
    return self::$fs; 
} 

p.s: Я не автор плагина

+2

Иисус. 'goto' в PHP. С какой стати? – Shoe

+0

Я не писал код ... Это не мой плагин. Мне просто интересно, может ли кто-то переписать его, потому что это вызывает некоторые проблемы для моих друзей, которые используют PHP 5.3. – Adam

+1

@Adam Я бы очень опасался использовать код _any_ от того, кто написал это – Clive

ответ

0

Это должно работать

private static function get_filesystem() { 
    if (false === self::$fs) { 
     global $wp_filesystem; 

     require_once(ABSPATH . 'wp-admin/includes/file.php'); 

     $write_method = get_filesystem_method(array(), false); 
     if ($write_method != 'direct' && $write_method != 'ftpsockets') { 
      self::$fs = false; 
     } 

     else if (false === ($creds = @request_filesystem_credentials(''))) { 
      self::$fs = false; 
     } 

     else if (! WP_Filesystem($creds)) { 
      self::$fs = false; 
     } else self::$fs = $wp_filesystem; 
    } 

    return self::$fs; 
} 
+0

Это работает еще лучше и, кажется, заставляет процесс работать быстрее. Отлично. – Adam

+0

@Adam, «кажется, заставляет процесс работать быстрее», да, я чувствую, что 1 мс тоже. – Shoe

2

Просто замените:

goto output; 

с:

return self::$fs; 

и удалить output: в конце.

Ваш метод может быть переписано в виде:

private static function get_filesystem() { 
    if (false === self::$fs) { 
     global $wp_filesystem; 
     require_once(ABSPATH . 'wp-admin/includes/file.php'); 
     $write_method = get_filesystem_method(array(), false); 
     if (
      ($write_method != 'direct' && $write_method != 'ftpsockets') || 
      (false === ($creds = @request_filesystem_credentials(''))) || 
      (!WP_Filesystem($creds)) 
     ) self::$fs = false; 
     else self::$fs = $wp_filesystem; 
    } 
    return self::$fs; 
} 
+0

Большое спасибо! Надеюсь, это сработает, и я попробую! – Adam

+1

Мои друзья сказали, что это сработало! Спасибо за помощь. – Adam

+0

@Jueecy Если вы изменяете внутреннее условие, чтобы установить 'self :: $ fs = $ wp_filesystem', когда все (инвертированные) условия истинны, требуется только последний' return', что еще больше упрощает. ' –

0

Другой способ:

private static function get_filesystem() { 
    if (false === self::$fs) { 
     global $wp_filesystem; 

     require_once(ABSPATH . 'wp-admin/includes/file.php'); 

     $write_method = get_filesystem_method(array(), false); 

     if ( 
      $write_method != 'direct' && $write_method != 'ftpsockets' 
      || 
      false === ($creds = @request_filesystem_credentials('')) 
      || 
      ! WP_Filesystem($creds) 
     ) { 
      self::$fs = false; 
     } else { 
      self::$fs = $wp_filesystem; 
     } 
    } 
    return self::$fs; 
} 
0

Если удалить все избыточный код, вы в конечном итоге с это:

private static function get_filesystem() { 
    if (false === self::$fs) { 
     global $wp_filesystem; 
     require_once(ABSPATH . 'wp-admin/includes/file.php'); 
     $write_method = get_filesystem_method(array(), false); 
     if (($write_method == 'direct' || $write_method == 'ftpsockets') && 
      (false !== ($creds = @request_filesystem_credentials(''))) && 
      (WP_Filesystem($creds)) { 
      self::$fs = $wp_filesystem; 
     } 
    } 
    return self::$fs; 
}