PHP - 如何执行存储在变量中的函数?

时间:2016-02-20 17:35:17

标签: php regex wordpress function file

我需要在style.css.php中输出2个变量$ style1和$ style2的值,两者都位于display.php

display.php(我不能直接修改此文件):

<?php

if ( ! function_exists( 'add_customizer_css' ) ) {

    function add_customizer_css() {

        $bgcolor = '#fff';
        $fontcolor = '#000';

        $style1 = '.some-class { background-color: ' . $bgcolor . ';}';
        $style2 = '.some-class { color: ' . $fontcolor . ';}';

        wp_add_inline_style( 'style1', $style1 ); // Unwanted line
        wp_add_inline_style( 'style2', $style2 ); // Unwanted line
    }
}

我不确定以下是实现这一目标的最佳方法......

style.css.php:

<?php

$display_php = file_get_contents( '../theme/inc/customizer/display.php' );

$patterns = array();
$patterns[0] = '/^<\?php/';
$patterns[1] = '/wp_add_inline_style\( \'style1\', \$style1 \);/';
$patterns[2] = '/wp_add_inline_style\( \'style2\', \$style2 \);/';

$replacements = array();
$replacements[0] = '';
$replacements[1] = 'echo $style1';
$replacements[2] = 'echo $style2';

$display_php = preg_replace( $patterns, $replacements, $display_php );

header( 'Content-type: text/css' );

include( '../theme/style.css' ); // Aditionnal CSS

// Here I need to output $style1 and $style2

那么可以执行存储在$ display_php中的add_customizer_css(),这样,它可以定义并输出$ style1和style2吗?

1 个答案:

答案 0 :(得分:0)

我将如何做到这一点。请注意,这使用eval(),通常不建议使用eval()。在Google中搜索使用<?php header( 'Content-type: text/css' ); include( '../theme/inc/customizer/display.php' ); $ref = new ReflectionFunction('add_customizer_css'); $start = $ref->getStartLine(); $end = $ref->getEndline(); $lines = file('../theme/inc/customizer/display.php'); $function = ''; for($i = $start; $i < $end - 1; $i++){ if(strpos($lines[$i], 'wp_add_inline_style') === false){ $function .= $lines[$i]; } } $function .= 'echo "$style1\n$style2\n";'; eval($function); include('../theme/style.css'); // Aditionnal CSS 的风险。我也使用ReflectionFunction

{{1}}