为什么我在自定义PHP函数中得到“Undefined variable”

时间:2014-07-01 14:00:44

标签: php dom

我与PHP Simple Dom Parser合作。实际上,我为每个我想要测试的标签创建了一个测试:

if(count($html->find('section')) == 0){
echo '<p class="pstatus bg-danger"><span class="glyphicon glyphicon-remove"></span>Aucune balise sémantique section.</p>';
}
elseif(count($html->find('section')) >= 1){
echo '<p>Nombre de balises sémantiques section: <span>' . count($html->find('section')) . '</span></p>';    
}

我尝试创建一个函数来重写我的所有代码以减少行数。我试过这个:

function ftest($balise,$balisetxt){
if(count($html->find('$balise')) == 0){
    echo '<p class="pstatus bg-danger"><span class="glyphicon glyphicon-remove"></span>Aucune $balisetxt.</p>';
}
elseif(count($html->find('$balise')) >= 1){
    echo '<p>Nombre de $balisetxt: <span>' . count($html->find('section')) . '</span></p>'; 
}
}

ftest('section', 'balise sémantique section');

但我得到了这些

Notice: Undefined variable: html in E:\xampp\htdocs\testmobile\index.php on line 69

Fatal error: Call to a member function find() on a non-object in E:\xampp\htdocs\testmobile\index.php on line 69

就像PHP无法在函数中从PHP Simple Dom Prser访问$ html-&gt;查找东西。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您应该了解有关PHP及其范围的更多信息:http://www.php.net/manual/fr/language.variables.scope.php(法语内容,因为您看起来像法国人)

简而言之,A函数无法访问未定义的变量/未通过参数传递的变量

答案 1 :(得分:0)

$html在函数中没有范围,要么将其作为参数传递,要么使用global关键字来获取范围。 $html->find('$balise')也应为$html->find($balise)

<?php 
/**
 * find text, yada..
 * @uses $html
 * @param string $balise
 * @param string $balisetxt
 * @return string
 */
function ftest($balise,$balisetxt)
{
    global $html;

    $return = null;

    if(count($html->find($balise)) == 0)
    {
        $return = '<p class="pstatus bg-danger"><span class="glyphicon glyphicon-remove"></span>Aucune '.htmlentities($balisetxt, ENT_QUOTES, "UTF-8").'.</p>';
    } else 

    if(count($html->find($balise)) >= 1)
    {
        $return = '<p>Nombre de '.htmlentities($balisetxt, ENT_QUOTES, "UTF-8").': <span>' . count($html->find('section')) . '</span></p>';
    }
    return $return;
}

ftest('section', 'balise sémantique section');
?>