为什么这个php函数不执行?

时间:2016-03-17 14:07:20

标签: php wordpress scope closures

以下是php文档的一部分,其中包含几个条件。第一个,如果真实,则将一个匿名函数存储在变量$the_image_styles中,稍后成功调用几行。第二个,如果真实,则将一个匿名函数存储在变量$the_overlay_styles中,该变量从未随后执行。

WordPress输出以下内容:调用未定义的函数the_overlay_styles()

在我看来,两个声明/调用之间没有区别,但显然情况并非如此。我错过了什么?

<?php
$banner = get_field('banner_image');
// Check for image
if ($banner) :
    $xpos = get_field('banner_xpos');
    $ypos = get_field('banner_ypos');
    // Style string for background image
    $the_image_styles = function() use ($banner, $xpos, $ypos){
        echo "background-image:url({$banner['sizes']['large']}); background-position:{$xpos} {$ypos}";
    };
    // Check for overlay, for later use
    $has_overlay = get_field('has_banner_overlay');
?>

    <!-- Article header with banner -->
    <header style="<?php $the_image_styles(); ?>"> <<-- This function call works

        <?php
        if ($has_overlay) :
            $banner_colour  = get_field('banner_colour');
            $banner_opacity = number_format( get_field('banner_opacity') / 100, 2 );
            // Style string for imageoverlay
            $the_overlay_styles = function() use ($banner_colour, $banner_opacity){
                echo "background:{$banner_colour}; opacity:{$banner_opacity}";
            };
        ?>

        <div style="<?php the_overlay_styles(); ?>"></div> <<-- This call never executes
        <?php endif; ?>
        <h1><?php the_title(); ?></h1>
    </header>


<?php else: ?>

2 个答案:

答案 0 :(得分:1)

您正在定义引用闭包的$the_overlay_styles variable。要打电话给你,你做$the_overlay_styles();

但不要。只需将其定义为以正常函数开头:

function the_overlay_styles() {

你知道但是,甚至不这样做。只需在这里创建一个变量!更不用说了。

$the_overlay_styles = "background: $banner_colour; opacity: $banner_opacity";

现在,您可以在需要时echo $the_overlay_styles

答案 1 :(得分:0)

在这样的函数调用之前添加一个$

<div style="<?php $the_overlay_styles(); ?>"></div> <<-- This call never executes

函数声明是相同的,但函数调用是不同的。