繁体   English   中英

条件作为PHP输出缓冲区内的字符串

[英]condition as string inside PHP output buffer

我正在使用ob_start设置一些内容并将这些内容写入文件。

function get_some_contents(){
    ob_start();
    ?>
    <div class="test">
        <?php if( isset( $test ) ){
            echo 'Sample text';
        }?>
    </div>
    <?php
    return ob_get_clean();
}

我需要函数中的内容来写入php文件。 但是,当我写入内容时, if condition不会写入文件。 相反,它本身在那里执行。 除了将其存储在变量中之外,是否还有其他方法可以将if条件直接添加到缓冲区中而不执行它?

好吧,是的,您正在使用实际的PHP标记,这将导致PHP被解释。 使用其他任何字词都可以避免这种情况:

function get_some_contents(){
    return <<<'EOD'
        <div class="test">
            <?php if( isset( $test ) ){
                echo 'Sample text';
            }?>
        </div>
EOD;
}
function get_some_contents(){
    ob_start();
    ?>
    <div class="test">
        <?= '<?php'; ?> if( isset( $test ) ){
            echo 'Sample text';
        }?>
    </div>
    <?php
    return ob_get_clean();
}

把它放到template.php

<div class="test">
    <?php if( isset( $test ) ){
        echo 'Sample text';
    }?>
</div>

并根据需要使用file_get_contents或类似文件从那里读取它。

想法是不要在代码中使用<?php?>标记,而要使用START_PHPEND_PHP ,这对PHP没有意义。 但是在将代码返回给调用者之前,请执行必要的文本替换操作,用真实的东西替换这些伪指令:

<?php

function get_some_contents(){
    ob_start();
    ?>
    <div class="test">
        START_PHP if( isset( $test ) ){
            echo 'Sample text';
        }END_PHP
    </div>
    <?php
    $code = ob_get_clean();
    $code = str_replace('START_PHP', '<?php', $code);
    $code = str_replace('END_PHP', '?>', $code);
    return $code;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM