在PHP heredoc中扩展chart.js会导致解析错误

时间:2015-09-19 01:33:51

标签: javascript php eval chart.js

我在PHP中使用chart.js创建一个图表,如下所示:

$chart = <<<ECHO
<script type="text/javascript">
var ctx = document.getElementById("myChart").getContext("2d");

Chart.types.Bar.extend({
    name: "myChart",
    initialize: function () {
        Chart.types.Bar.prototype.initialize.apply(this, arguments);
    }
});

new Chart(ctx).myChart(data, {
    scaleLabel : "<%= value + ' $' %>"
});

</script>
ECHO;
echo $chart;

如果我在Javascript中运行它,这段代码工作正常,但不幸的是我需要通过PHP(我在CMS中使用一个组件)显示它不起作用。我收到以下错误:

Parse error: syntax error, unexpected '=', expecting '}' in process.php(1227) : eval()'d code on line 154

我将错误缩小到initialize: function() {...}代码行。但是为什么它会在PHP回声中引起问题?

1 个答案:

答案 0 :(得分:1)

我不确定你为什么会遇到问题,我认为你不应该这样。

但是我有一个更好的答案,使用缓冲区代替heredocs(无论如何它们更容易使用)

Google ob_start了解它是如何运作的,它们非常有用

ob_start()?>
<script type="text/javascript">
var ctx = document.getElementById("myChart").getContext("2d");

Chart.types.Bar.extend({
    name: "myChart",
    initialize: function () {
        Chart.types.Bar.prototype.initialize.apply(this, arguments);
    }
});

new Chart(ctx).myChart(data, {
    scaleLabel : "<%= value + ' $' %>"
});

</script>
<?php $chart = ob_get_clean();
echo $chart;