解析错误:语法错误,第313行意外的T_FUNCTION

时间:2017-06-15 23:39:48

标签: php function

我收到此错误。 解析错误:语法错误,意外T_FUNCTION 我知道这是因为我的旧版php,但我必须修复它才能在所有php版本上工作,因为客户端也可能有一个旧的php版本。 这一行的错误:

$ pattern ='#(' .array_reduce($ pattern_array,function($ carry,$ item){

我试过玩,但它不起作用。

我的Php代码:

function theme_oembed_videos() {

    global $post;

    if ( $post && $post->post_content ) {

        global $shortcode_tags;
        // Make a copy of global shortcode tags - we'll temporarily overwrite it.
        $theme_shortcode_tags = $shortcode_tags;

        // The shortcodes we're interested in.
        $shortcode_tags = array(
            'video' => $theme_shortcode_tags['video'],
            'embed' => $theme_shortcode_tags['embed']
        );
        // Get the absurd shortcode regexp.
        $video_regex = '#' . get_shortcode_regex() . '#i';

        // Restore global shortcode tags.
        $shortcode_tags = $theme_shortcode_tags;

        $pattern_array = array( $video_regex );

        // Get the patterns from the embed object.
        if ( ! function_exists( '_wp_oembed_get_object' ) ) {
            include ABSPATH . WPINC . '/class-oembed.php';
        }
        $oembed = _wp_oembed_get_object();
        $pattern_array = array_merge( $pattern_array, array_keys( $oembed->providers ) );

        // Or all the patterns together.
        $pattern = '#(' . array_reduce( $pattern_array, function ( $carry, $item ) {
            if ( strpos( $item, '#' ) === 0 ) {
                // Assuming '#...#i' regexps.
                $item = substr( $item, 1, -2 );
            } else {
                // Assuming glob patterns.
                $item = str_replace( '*', '(.+)', $item );
            }
            return $carry ? $carry . ')|('  . $item : $item;
        } ) . ')#is';

        // Simplistic parse of content line by line.
        $lines = explode( "\n", $post->post_content );
        foreach ( $lines as $line ) {
            $line = trim( $line );
            if ( preg_match( $pattern, $line, $matches ) ) {
                if ( strpos( $matches[0], '[' ) === 0 ) {
                    $ret = do_shortcode( $matches[0] );

                } else {
                   $ret = wp_oembed_get( $matches[0] );

                }
                return $ret;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你必须创建一个命名函数(比如“myfunction”,但名字更好)。
array_reduce()将一个字符串作为第二个参数,这是函数的名称

function myfunction($carry, $item) {
    if ( strpos( $item, '#' ) === 0 ) {
        // Assuming '#...#i' regexps.
        $item = substr( $item, 1, -2 );
    } else {
        // Assuming glob patterns.
        $item = str_replace( '*', '(.+)', $item );
    }
        return $carry ? $carry . ')|('  . $item : $item;
};

...

$pattern = '#(' . array_reduce( $pattern_array, "myfunction" ) . ')#is';