PHP:__ call不能正常工作

时间:2013-02-14 02:55:03

标签: php wordpress callback naming magic-methods

我在使用魔术API_Widgets函数在WordPress中创建名为__call的类时遇到问题。如果我简单地将文件重命名为derp.php,将类重命名为API_Derp,那么它可以正常运行。

以下示例已被删除对此问题不重要的所有内容(因此,如果除了第三个代码块中指定的特定致命错误之外还有任何错误,请忽略它。)

请注意,我知道core.phpAPI__call有效,因为重命名widgets.php或调用另一个类的工作正常。

core.php中:

class API {

    function __call( $method, $args ) {

        $rmethod = "API_{$method}";
        if ( !class_exists( $rmethod ) ) {

            $lmethod = strtolower( $method );
            require_once( "{$lmethod}.php" );

        }

        return new $rmethod( $args );

    }

}

widgets.php:

class API_Widgets {

    private $widgets = array();

    function Add( $widgets ) {

        if ( is_array( $widgets ) ) {

            foreach ( $widgets as $widget ) {

                if ( !in_array( $widget, $this->widgets ) )
                    $this->widgets[] = $widget;

            }

        } else
            $this->widgets[] = $widgets;

    }

}

api.php:

$api = new API();
$widgets = $api->Widgets(); // Fatal error: Class 'API_Widgets' not found in /home4/goldencr/public_html/wp-content/plugins/minecraft-api/api/core.php on line 25
//$widgets->Add( 'some_widget' );

1 个答案:

答案 0 :(得分:1)

延伸评论:

虽然没有暗示你的问题,但似乎你可能实际上并未包括widgets.php。尝试使用绝对路径来解决这个问题:

require_once( __DIR__.DIRECTORY_SEPARATOR.$lmethod.".php" );