虽然在单元测试中工作,但传递的参数不能在xpath上工作

时间:2017-01-20 04:16:36

标签: php oop xpath simplexml

class ad_xml_model extends \ITico_core\common_class {

    public function get_info_from_ad($input_id) {
        $xml_file = parent::get_set('xml');
        $ad_info = $xml_file->xpath("//ad[@id='" . $input_id . "']");
        parent::get_set('ad_info', $ad_info);
        return $ad_info;
    }

}

上面的代码在单元测试时有效,我已经尝试将字符串和int传递给函数,并且它可以同时工作。

<h2>get_info_from_ad</h2>
test data: 1<br>
info from ad:- <br>
<?php
$ad_xml_model->get_info_from_ad(1);
$ad_info = $ad_xml_model->get_set('ad_info');
print_r($ad_info);

但在下面的代码中,当从控制器调用时它无法正常工作

class main_controller(){
    $ad_top_limit = count($ads_from_category);
    $key = rand(0, $ad_top_limit - 1);
    $chosen_ad = $ads_from_category[$key];
    parent::get_set('chosen_ad', $chosen_ad);
    $ad_info = $ad_xml_model->get_info_from_ad($chosen_ad);
    parent::get_set('ad_info', $ad_info);
    if ($ad_info != null) {
        switch ($ad_type) {
            case NUll:
                break;
            case 'long':
                $long_view = new long_view($ad_info);
                $long_view->show_ad();
        }
    }
}

和调试页面测试

<?php
echo $main_controller->get_set('chosen_ad') . "<br>";
?>
ad information:-: <br>
<?php
print_r($main_controller->get_set('ad_info'));

screenshot of the debug page

我已经走了回程所有变量的每一步,检查它们是否为空但是由于某种原因,xpath在从主控制器调用时不起作用但是它可以正常工作即使通过了完全相同的参数,也要进行单元测试。

1 个答案:

答案 0 :(得分:0)

我发现解决方案是隐式告诉xpath它是一个int

public function get_info_from_ad($input_id) {
    $xml_file = parent::get_set('xml');
    $ad_info = $xml_file->xpath("//ad[@id='" . (int)$input_id . "']");
    parent::get_set('ad_info', $ad_info);
    return $ad_info;
}

出于某种原因,如果我将它设置为字符串,它仍然无法正常工作,也许其他人可以分享它。