PHP - 使用静态函数的Namespaced插件

时间:2014-04-14 04:51:41

标签: php wordpress

我正在尝试使用类和静态函数命名我的插件函数。我收到了错误:

  

致命错误:构造函数Read_Time :: read_time()在第41行的/Applications/MAMP/htdocs/Wordpress/wp-content/plugins/readtime/readtime.php中不能是静态的

class Read_Time {
public $options;

static public function init() {
    add_filter('wp_meta', __CLASS__ . '::post_text');
}

static private function post_text() {
    if(is_single()) {
        global $post;
        $content = $post->post_content;
        echo("<h1>" . self::read_time($content) . "</h1>");
    }
}

static private function word_count($to_count) {
    return str_word_count($to_count);       
}

static private function read_time($content) {
    $wpm = 200;
    $int_minutes = ceil( self::word_count($content) / $wpm );
    if($int_minutes == 1) {
        return $int_minutes . " minute";
    } 
    else {
        return $int_minutes . " minutes";
    }       
}
}       
add_action('init', 'Read_Time::init');

有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

PHP将您的方法read_time解释为类Read_Time的构造函数,因为它不区分大小写。构造函数不能是静态的。

From the online documentation

  

从PHP 5.3.3开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。此更改不会影响非命名空间的类。

     

示例#2命名空间类中的构造函数

<?php
namespace Foo;
class Bar {
    public function Bar() {
        // treated as constructor in PHP 5.3.0-5.3.2
        // treated as regular method as of PHP 5.3.3
    }
}
?>

P.S。如果你真的使用PHP的版本&lt; 5.3.3,你应该强烈考虑升级。很多已经改变,旧版本可能有未修补的错误。