未定义的变量 - 如何修复?

时间:2014-12-12 13:32:46

标签: php variables undefined

这是我的代码:

在php文件中:

if($special>0){
    $lease_price = (($special/1000)*38);
} else {
    $lease_price = (($price/1000)*38);
}
$lease_price = $this->currency->format($lease_price);

并在前端tpl文件中:

<p>
   <i class="fa fa-chevron-down"></i>
   <b>Lease To Buy Price:</b>
   <span><?php if($price>500){ ?>
       <?php echo $lease_price; ?>
   <?php } else { echo 'NA'; } ?></span>                     
</p>

目前我在var dump之后遇到此问题:Notice: Undefined variable: lease_price in /var/www/framec.co.uk/catalog/view/theme/lexus_superstore/template/product/product.tpl on line 160NULL

这是指向我的php文件http://pastebin.com/bTPtvgUQ

的pastebin的链接

我需要添加什么才能使其正常工作?我需要这样的代码吗?:

'type' => $option['type'],

这是指向http://www.framec.co.uk/index.php?route=product/product&path=59_78&product_id=45

页面的链接

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题。

初始化它:

因此,它已经定义,当您尝试使用它时,PHP不会返回错误。

$lease_price = '';

if($special>0){
    $lease_price = (($special/1000)*38);
} else {
    $lease_price = (($price/1000)*38);
}
$lease_price = $this->currency->format($lease_price);

如果没有设置,请不要使用它:

如果没有定义,那么尝试访问未定义变量的代码将无法访问。

if ( isset($lease_price) ) {

    if($special>0){
      $lease_price = (($special/1000)*38);
    } else {
      $lease_price = (($price/1000)*38);
    }
  $lease_price = $this->currency->format($lease_price);
}

答案 1 :(得分:0)

尝试将其合并为一个,如果它不会以任何其他方式工作:)

问题很可能是它没有从你的PHP页面正确传递给你的TPL。

<p>
<i class="fa fa-chevron-down"></i>
<b>Lease To Buy Price:</b>
<span>
<?php 
if($special > 0) { 
    $lease_price = (($special/1000)*38); 
} else { 
    $lease_price = (($price/1000)*38); } 
$lease_price = $this->currency->format($lease_price);

if($price > 500) { 
echo $lease_price; 
} else { 
echo 'NA'; } ?></span>                     
</p>

在任何正常情况下,您应该检查是否

if(isset($lease_price)) {
    // this gets executed if $lease_price has a value
} else {
    // and this one if there is no initial value for $lease_price
}

您可以使用许多不同的方法处理此错误,但我认为关键是确保您的PHP代码位于正确的位置,并在模板中正确引用。

由于之前在SO上有一篇非常相似的帖子,我仍然认为你应该检查$price的值,将其作为临时错误检查<?= $price ?>添加到模板中,因为它可能已经存在转换为字符串,if($price > 500)永远不会被评估,因为'2,000.00' > 500不会是真的。

<强>更新

$tempPrice = str_replace(',',"", $price); //gets rid of ","
$tempPrice = substr($tempPrice,1); //removes currency from the front
$tempPrice = floatval($tempPrice); //converts to double from string

并将$price替换为$tempPrice

中的if
<p>
<i class="fa fa-chevron-down"></i>
<b>Lease To Buy Price:</b>
<span>
<?php 

$tempPrice = str_replace(',',"", $price); //gets rid of ","
$tempPrice = substr($tempPrice,1); //removes currency from the front
$tempPrice = floatval($tempPrice); //converts to double from string

if($special > 0) { 
    $lease_price = (($special/1000)*38); 
} else { 
    $lease_price = (($tempPrice/1000)*38); } 
$lease_price = $this->currency->format($lease_price);

if($tempPrice > 500) { 
echo $lease_price; 
} else { 
echo 'NA'; } ?></span>                     
</p>